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的一致,还需要比较变量的版本一致。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。