【C# 线程】interLocked锁
作者:互联网
overview
同步基元分为用户模式和内核模式
用户模式:Iterlocked.Exchange(互锁)、SpinLocked(自旋锁)、易变构造(volatile关键字、
volatile
类、Thread.VolatitleRead|Thread.VolatitleWrite
)、MemoryBarrier。
.net中的System.Threading命名空间的Interlocked类可以为多个线程共享的变量提供原子操作。
经验显示,那些需要在多线程下被保护的资源通常是整型的,而这些被共享的整型值最常见的操作就是增加、减少。Interlocked类提供了一个专门的机制用于完成这些特定的操作。
Iterlocked.Exchange()
不只是原子的,它还照顾了内存可见性。
Interlocked 轻量级锁
Interlocked.Increment(ref value) 数值加一(原子性操作)
Interlocked.Decrement(ref value) 数值减一(原子性操作)
Interlocked.Exchange(ref value1, value2) 交换:把值2赋给值1;返回新值
Interlocked.CompareExchange(ref value1, value2, value3) 实现比较和交换两种功能:值1和值3比较,如果相同,把值2给值1,不相同则不作任何操作;返回原值(多用于判断条件)(示例3中会用到)
Interlocked.MemoryBarrier :按如下方式同步内存存取:执行当前线程的处理器在对指令重新排序时,不能采用先执行 MemoryBarrier() 调用之后的内存存取,再执行 MemoryBarrier() 调用之前的内存存取的方式。Thread.MemoryBarrier 就是包装了它。
Interlocked.MemoryBarrierProcessWide:用于进程 的内存屏障。整个进程范围的内存屏障非常昂贵。 它必须强制执行进程中的每个 CPU,以可能产生成千上万个循环。
注意不要传入 volatile类型。
标签:Thread,Exchange,C#,MemoryBarrier,线程,内存,interLocked,ref,Interlocked 来源: https://www.cnblogs.com/cdaniu/p/15773504.html