CAS操作
3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。
执行:当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。
自旋CAS:循环进行CAS操作直到成功为止
原理:CPU提供了一个单独的CSA指令,一条指令就可以完成上述操作,相当于是原子的
CAS问题:
- 循环时间长开销很大。如果CAS失败,会一直进行尝试。如果CAS长时间一直不成功,可能会给CPU带来很大的开销。
- 只能保证一个共享变量的原子操作。可以将多个共享变量合并为一个,AtomicReference
- ABA问题。使用版本号解决