C#多线程怎么锁定全局变量
Dictionary<string,DateTime> dictionary = new Dictionary<string,DateTime>();
我现在有两个线程,A线程对dictionary 执行循环添加操作,B线程对dictionary 执行删除错在。
我怎么在B线程开始删除时锁定dictionary ,使A线程不能往dictionary 里面添加数据?
多线程对共同资源的访问,往往会造成数据的混乱和不可预料的结果,因此一般需要加锁访问进行互斥访问。
所谓“互斥访问”是指,一段代码或者公共变量,在一个时刻只允许一个线程去访问,其他的线程需要等待,直到改线程处理完毕并通知下一个等待的线程去处理。
1、可以用“Lock”来提供代码的互斥访问:
定义一个对象作为锁
public static object locker = new object();//添加一个对象作为锁
在有修改的时候加上lock
1.
lock (locker)//锁
{
/*添加过程*/
dictionary.Add("....", DateTime.Now);
}
2.
lock (locker)//锁
{
/*删除过程*/
dictionary.Remove("....");
}
文章转载自:C#多线程怎么锁定全局变量