本文实例讲述了C#中volatile与lock用法,分享给我们供大家参谋。具体深入分析如下:

不久前在代码中,开掘人家利用了lock关键字,为了精通外人写的代码,所以自个儿对lock关键字的运用切磋了下。

一、C#中volatile

微软官方解释,请百度:lock 语句(C# 参考)

volatile是C#永利皇宫登录网址 ,中用来调整同步的要害字,其含义是针对程序中有的敏感数据,不容许十二线程同时做客,有限帮忙数据在此外访问时刻,最多有多个线程访问,以保障数据的完整性,volatile是修饰变量的修饰符。

微软给了个官方网站实例代码:

一、volatile的行使处境

class Account  
{  
    decimal balance;  
    private Object thisLock = new Object();  

    public void Withdraw(decimal amount)  
    {  
        lock (thisLock)  
        {  
            if (amount > balance)  
            {  
                throw new Exception("Insufficient funds");  
            }  
            balance -= amount;  
        }  
    }  
}  

多个线程同时做客三个变量,CL大切诺基为了效用,允许每一个线程进行本地缓存,那就变成了变量的不1致性。volatile便是为了解决那么些标题,volatile修饰的变量,不容许线程举行地面缓存,各种线程的读写都是一贯操作在共享内部存款和储蓄器上,这就保证了变量始终具备一致性。

  同时列出了二种错误的,只怕说大概出标题标用法,须要小心!

2、volatile 关键字可利用于以下项指标字段

列出微软的备注:

一 引用类型


② 整型,如 sbyte、byte、short、ushort、int、uint、char、float 和 bool。

lock 关键字可确认保证当贰个线程位于代码的临界区时,另3个线程不会进去该临界区。
假使别的线程尝试进入锁定的代码,则它将一向等候(即被拦住),直到该对象被放出。

3 具备整数基类型的枚举类型。

线程 那节商讨了线程处理。

四 已知为引用类型的泛型类型参数。

lock 关键字在块的早先处调用 Enter,而在块的结尾处调用 Exit。 ThreadInterruptedException 引发,如果 Interrupt 中断等待输入lock 语句的线程。

5 不可能将一部分变量表明为 volatile。

一般说来,应制止锁定 public 类型,不然实例将赶上代码的决定范围。
常见的结构 lock (this)lock (typeof (MyType)) 和 lock ("myLock") 违反此准则:

网站地图xml地图