C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁
MingsonZheng 人气:1
在多线程环境中,多个线程可能会同时访问同一个资源,为了避免访问发生冲突,可以根据访问的复杂程度采取不同的措施
原子操作适用于简单的单个操作,无锁算法适用于相对简单的一连串操作,而线程锁适用于复杂的一连串操作
### 原子操作
修改状态要么成功且状态改变,要么失败且状态不变,并且外部只能观察到修改前或者修改后的状态,修改中途的状态不能被观察到
.NET 中,System.Threading.Interlocked 类提供了用于执行原子操作的函数,这些函数接收引用参数(ref),也就是变量的内存地址,然后针对该内存地址中的值执行原子操作
### 无锁算法
不使用线程锁,通过修改操作的内容使它们满足原子操作的条件
.NET 提供了一些线程安全的数据类型,这些数据类型大量应用了无锁算法来提升访问速度(在部分情况下仍需要线程锁):
System.Collections.Consurrent.CurrentBag
System.Collections.Consurrent.CurrentDictionary
加载全部内容