C#多线程怎么锁定全局变量

Dictionary<string,DateTime>dictionary=newDictionary<string,DateTime>();我现在有两个线程,A线程对d... Dictionary<string,DateTime> dictionary = new Dictionary<string,DateTime>();
我现在有两个线程,A线程对dictionary 执行循环添加操作,B线程对dictionary 执行删除错在。我怎么在B线程开始删除时锁定dictionary ,使A线程不能往dictionary 里面添加数据?
谢谢
展开
 我来答
SK蓮華生輝
推荐于2018-03-08 · TA获得超过199个赞
知道小有建树答主
回答量:56
采纳率:0%
帮助的人:0
展开全部
方法还是很多的,例如:

public static Dictionary<string, DateTime> dictionary = new Dictionary<string, DateTime>();

public static object locker = new object();//添加一个对象作为锁

public static void AddRecord()//线程1循环调用此函数
{
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
}
public static void DeleteRecord()//线程2循环调用此函数
{
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
}
至于线程的调用过程就不写了,你根据实际情况操作吧
路路通667788
2018-04-13 · TA获得超过1.5万个赞
知道小有建树答主
回答量:66
采纳率:100%
帮助的人:1.3万
展开全部

只要加上一下代码就可以了:

public static object locker = new object();//添加一个对象作为锁

就是在有修改的时候加上lock

lock (locker)//锁

{

/*添加过程*/

dictionary.Add("....", DateTime.Now);        }

lock (locker)//锁

{    /*删除过程*/

dictionary.Remove("....");        }

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
du瓶邪
推荐于2016-11-12 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2915万
展开全部
只要加上一下代码就可以了:
public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}

     lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
478410969
2010-09-01 · 超过24用户采纳过TA的回答
知道答主
回答量:142
采纳率:0%
帮助的人:79.5万
展开全部
借鉴设计模式中的单例模式,可以先声明一个无关变量sync,进行操作前
lock(sync)
{
业务逻辑
}
单例模式不是直接锁定实例变量instance,是因为可能还没有生成该实例,你这个应该可以直接锁定dictionary
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式