请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于CAS的ABA问题,是不是线程安全问题

老师,面试的时候被问到CAS的ABA问题,我能说清楚原理,但是被问到ABA问题对我来说是线程安全问题吗,我当时想了一下,没有想出来情景,回答说目前还没有遇到过这种情况,觉得不是线程安全问题。然后回来看了一下问答区中您有对ABA问题发了一个链接,里面是说在栈或者LinkedList中改变栈顶或者HEAD时会导致数据丢失。也看了网上很多别人的解释,要不解释不清楚,要不就是LinkedList,我感觉这种情况好像不是很普遍。所以想问一下老师,有没有其他情况会让CAS由于ABA问题而出现线程安全问题?

正在回答

插入代码

2回答

Jimin 2018-08-27 22:56:03

你好,这里正好有个例子可以回答你的问题。具体如下:

某人账户里有10000元,提取了5000元,因为提款机问题,有两个线程,同时把余额从10000变为5000

线程1(提款机):获取当前值10000,期望更新为5000,

线程2(提款机):获取当前值10000,期望更新为5000,

线程1成功执行了,线程2因为某种原因block了,这时汇款进来5000

线程3(默认):获取当前值5000,期望更新为10000,

这时候线程3成功执行,余额变为10000,

线程2从Block中恢复,获取到的也是10000,对比之后,发现可以提交,更新余额为5000!!!

此时,本来余额应该为10000(10000-5000+5000),但是实际上却变成了5000(10000-5000+5000-5000)

这就是ABA问题带来的线程安全问题。

1 回复 有任何疑惑可以回复我~
  • 提问者 Wind_Janna #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-08-28 14:40:23
  • 那么这个问题要怎样解决呢?
    回复 有任何疑惑可以回复我~ 2018-10-24 15:16:24
Jimin 2020-08-07 12:30:03

问题已解决

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信