CAS:Compare and Swap(比较再交换)

算法理解

算法过程

算法设计到三个操作数:

  • 当前的内存值V
  • 旧的预期值A
  • 需要写入的更新值B

CAS执行时,当且仅当预期值A符合内存地址V中存储的值时,就用新值U替换掉旧值,并写入到内存地址V中。负责不做更新

存在问题

  • ABA问题,一个线程将内存值从A改为B,另一个线程又从B改回到A(添加版本好解决该问题)
  • 性能开销问题,CAS算法需要不断自旋来读取最新的内存值,长时间读取不到就会造成较大的CPU开销
  • 只能保证一个共享变量的原子操作