1、什么是CAS
CAS : compare and swap 比较和交换。
CAS 在没有锁的情况下,可以保证多个线程对一个值的更新。
ABA 问题: 中间 改过值,但最终又回到0 了。例如:
原值:0
线程1:读取 0, 要将0 改为 1 。但没改之前,发现以下操作,所以线程1在将0改为1时,这个0已经不是之前的0 了。
线程2: 读取 0,将值改为 2。
线程3: 读取2,将值改为 0。
ABA问题 的简单理解:你的女朋友在离开你的这段儿时间经历了别的人,自旋就是你空转等待,一直等到她接纳你为止。
ABA 问题解决方法:加版本号。基础类型简单值不需要版本号
2、CAS底层原理
最终实现(依赖于硬件的混编指令):lock cmpxchg
cmpxchg 指令作用:cas修改变量值。 但该指令为 非原子操作。
lock 指令作用 : 在执行cmpxchg(比较修改)指令时,其它cpu无法介入。
3、使用
cas(v, a, b) ,变量v,期待值a, 修改值b