.Net中常见锁

序言

锁的核心作用是用来控制并发环境下对变量和资源的有序访问,c#中常见的锁有如下几种类型:

(1) Monitor

(2) Mutex

(3) ReaderWriterLockSlim

(4) SpinLock

(5) Semaphore

lock锁

//定义一个私有成员变量,用于Lock的锁定标志  
    private static object lockobj = new object();
    void DoSomething()
    {
        lock (lockobj)
        {
            //需要锁定的代码块  
        }
    }
View Code

volatile 

private volatile bool isStart = false;

更通俗的解释:

Volatile 字面的意思时易变的,不稳定的。在C#中也差不多可以这样理解。

编译器在优化代码时,可能会把经常用到的代码存在Cache里面,然后下一次调用就直接读取Cache而不是内存,这样就大大提高了效率。但是问题也随之而来了。

在多线程程序中,如果把一个变量放入Cache后,又有其他线程改变了变量的值,那么本线程是无法知道这个变化的。它可能会直接读Cache里的数据。但是很不幸,Cache里的数据已经过期了,读出来的是不合时宜的脏数据。这时就会出现bug。

用Volatile声明变量可以解决这个问题。用Volatile声明的变量就相当于告诉编译器,我不要把这个变量写Cache,因为这个变量是可能发生改变的。

资料

https://www.cnblogs.com/xibei/p/12001805.html

C# 针对特定的条件进行锁操作,不用lock,而是mutex

 

posted @ 2018-03-11 10:37  ~沐风  阅读(890)  评论(0)    收藏  举报