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


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

我现在有两个线程,A线程对dictionary 执行循环添加操作,B线程对dictionary 执行删除错在。

我怎么在B线程开始删除时锁定dictionary ,使A线程不能往dictionary 里面添加数据?


多线程对共同资源的访问,往往会造成数据的混乱和不可预料的结果,因此一般需要加锁访问进行互斥访问。

所谓“互斥访问”是指,一段代码或者公共变量,在一个时刻只允许一个线程去访问,其他的线程需要等待,直到改线程处理完毕并通知下一个等待的线程去处理。

1、可以用“Lock”来提供代码的互斥访问:

[csharp]  view plain  copy
  1. lock (一个类的示例、静态变量的类名)  
  2. {  
  3.         // 代码  
  4. }  

2、可以用“Monitor”来提供变量的互斥访问:

[csharp]  view plain  copy
  1. int money;  
  2. Monitor.Enter(money);  
  3. // money++或者money--;  
  4. Monitor.Exit(money);  

只要加上一下代码就可以了:
 public static object locker = new object();//添加一个对象作为锁
就是在有修改的时候加上lock
  1。   
 lock (locker)//锁
        {
            /*添加过程*/
            dictionary.Add("....", DateTime.Now);
        }
    
2. 
lock (locker)//锁
        {
            /*删除过程*/
            dictionary.Remove("....");
        }




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值