.Net中常见锁
序言
锁的核心作用是用来控制并发环境下对变量和资源的有序访问,c#中常见的锁有如下几种类型:
(1) Monitor
(2) Mutex
(3) ReaderWriterLockSlim
(4) SpinLock
(5) Semaphore
lock锁
//定义一个私有成员变量,用于Lock的锁定标志 private static object lockobj = new object(); void DoSomething() { lock (lockobj) { //需要锁定的代码块 } }
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

浙公网安备 33010602011771号