原子操作
原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换。
悲观锁
解决线程冲突常用锁,但是lock是阻塞式,还容易因为使用不当而导致死锁。
这种锁属于悲观锁,阻塞式的锁。
乐观锁
默认不冲突进行操作,如果失败后重试,直到成功为止,这个过程也叫自旋。
CAS(Compare and swap) 比较和交换
CAS,是“Compare And Swap”的缩写,中文简称就是“比较并替换”,在CAS算法中,它使用了3个基本操作数:内存地址对应的值V,旧的预期值A(旧值),要修改的新值B(新值),当且仅当预期值A和内存值V相同时,才将内存值修改为B,否则什么都不做,最后返回现在的V值。
Interlocked
操作 | 描述 |
---|---|
Interlocked.Increment | 原子操作,递增指定变量的值并存储结果。 |
Interlocked.Decrement | 原子操作,递减指定变量的值并存储结果。 |
Interlocked.Add | 原子操作,添加两个整数并用两者的和替换第一个整数 |
Interlocked.Exchange | 原子操作,赋值 |
Interlocked.CompareExchange(ref a, b, c); | 原子操作,a参数和c参数比较, 相等b替换a,不相等不替换。方法返回值始终是第一个参数的原值,也就是内存里的值 |