码迷,mamicode.com
首页 > 其他好文 > 详细

关于cas问题产生的aba问题解决

时间:2018-12-24 13:25:26      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:变化   执行   问题解决   操作   cas   amp   解决   判断   cst   

问题: 当利用automickinteger 进行cas 操作的时候  
compareandset 是没有错的。但是当多线程的时候 会有问题。会产生aba问题。
就比如说当 变量a =1 然后, 1线程去读他 做compareandset前 是1.
这时候2线程 对a +1 又 减了1 1线程去拿的时候可能判断 还是1 所以 进行了compareannset 并且可以执行。 因为比较了 1 = 1 这种值计算是没有问题的
但是会产生很多问题。状态发生了变化。但是 线程1 不知道。操作栈的时候就会出现这种问题。
利用AtomicStampedReference(无非加了一个版本号。)
AutomicStampedReference<Integer> automicRef = new AtomicStampedReference<>();
automicRef.compareandset(预期值,修改值,预期版本号, 修改后的版本号)

关于cas问题产生的aba问题解决

标签:变化   执行   问题解决   操作   cas   amp   解决   判断   cst   

原文地址:https://www.cnblogs.com/tecnologycc/p/10167961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!