当前位置:   article > 正文

CAS存在的问题和解决方案_cas存在什么问题

cas存在什么问题

CAS虽然很高效的解决了原子操作问题,但是CAS仍然存在三大问题:

1.ABA问题:因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么A-B-A 就会变成1A-2B-3A

2.循环时间开销大:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销(时刻a的内存值和时刻b的内存值比较,如果相等则更新,否则一直循环)

3.只能保证一个共享变量的原子操作:

解决方案

AtomicMarkableReference<V>  维护了boolean变量表示引用变量是否被更改过

AtomicStampedReference<V>  维护了int类型的变量表示版本号

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/303165
推荐阅读
  

闽ICP备14008679号