永发信息网

C#中的lock关键字有何作用

答案:1  悬赏:30  手机版
解决时间 2021-04-02 14:24
C#中的lock关键字有何作用
最佳答案
Lock是C#自带的锁函数。
最常用的场景是服务端处理并发。
简单的例子: A B C 三个线程都想去取钱,而账户只有一个且不能透支,余额是100元。
  如果三个一起取,每个都取60块钱。那么判断的时候,由于是并发的,A取了60,但是B同时也在取,B取的时候系统还没有把A的60给减掉,所以系统判断余额还是100,就给B也分了60块钱, 这样每个人都可以取到钱。最后账户余额将是-80元。 这就出错了。


用lock则可以去处理这个情况。
 private bool deadlocked = true;


 public void LockAccount(object o)
        {
            lock (this)
            {
                while(deadlocked)
                {
                    deadlocked = (bool)o;
                    Console.WriteLine("Foo: I am locked :(");
                    Thread.Sleep(500);
                }
            }
        }
当三个线程都进来的时候,系统先把A放入队列, B C 访问的时候,就会告诉他们,已经锁住了,你们等着吧, 然后每500毫秒 B C去访问以下这个锁,看A是否把钱取完。当A完成的时候,deadlocked解开,放下一个线程进来,依次类推。 
用LOCK就可以解决上面说的 3个线程并发取钱,最后导致程序出错的问题。 实际的应用可能会更复杂,但是原理也是如此。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
10吨货车应该配备多少KG灭火器
全国高校仪器竞价网结果有异议怎么办
为什么我倒车入库总是不进
360浏览器自动弹广告!!!谁来救救我
广告模特标准
肌肤底层缺水如何处理
公司注册的商标可以转让吗?转让给个人
山东顺鸿牛羊养殖场是一家正规的吗
算式x十4分之3x÷5分之4=620怎么写?
45分=______小时 4.05吨=
I go aii aut,False and free and easy.Who u
南昌退休2016年涨工资的细则
谁知道《香水》( 德 帕.聚斯金德)这本书想
evga主板怎么进bios
我看到博佳机器人上面有乐高的标志,请问他们
推荐资讯
这个字念什么?左边三点水右边一个亩,亩字下
看图写话蜜蜂在荷花采蜜
256-3分之256等于?
变频器怎么一拖二
黑色头发适合什么颜色的眉笔伊秀网
敦煌文艺出版社版的魔戒之王怎么样?
o3款威驰1,5前轴承总成多少钱
1.能用于比较N与O非金属性相对强弱的是
外地车在京明天限号走条路可以去天津
车学沇和陆星材好像我差点就搞混了,我还以为
DIGISTANCE DS-DR104的DVD是用什么型号奇声遥
导师给了一篇没有topic的essay,该怎么去写啊
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?