java-cas

  1. CAS
    1. ABA问题

CAS

乐观锁策略,无锁操作,使用CAS来做比较交换判断是否出现冲突,出现冲突就重试当前操作直到不冲突为止。

整体操作和三个值有关V,O,N

V O N
具体含义 内存中地址存放的实际值 预期值(旧值)

我们需要保证每次更新的时候V和O是一致的,才能将N的值替换到V中。

ABA问题

线程1:获取当前值A,期望更新B
线程2:获取当前值A,期望更新B
线程3:期望更新A
当1更新成功之后,2此时已经经过compare比较更新可以更新,但是由于阻塞没有更新,3先更新为A,然后2又重新更新为B

解决方法采用版本号,不仅比较VO的一致,还需要比较变量的版本一致。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。