有大佬帮忙分析我这个图吗,没弄明白CAS的ABA问题到底有什么弊端

美奇开发工作室
企业官方账号
2020-11-16 05:38:42

概念:什么是ABA问题呢?
假设有个共享变量的值为A,此时线程1去修改这个变量,在线程1修改的时候,线程2已经把这个变量修改成了B,然后线程3又把这个变量修改成了A。当线程1修改完毕时根据旧的预期值和共享内存的实际值进行比较得到的结果是相等的,则线程1认为变量没被修改过,则线程1提交成功,但其实变量已经被修改,此时的A非彼A,这就是ABA问题。

我的疑问:
1、按照ABA问题的概念,我上图画的思维逻辑是不是正确的,如果是正确的,那这个ABA问题似乎没有什么弊端漏洞呀,银行最终的存款余额还是正确的。
2、如果我上图画的是错的,那需要怎么去理解呢?

我也看了其他大佬的相关博客,但基本很难看明白他们画的图,所以就自己画了这个来理解ABA问题场景。
...全文
1250 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 亦夜 的回复:
普通场景下,ABA问题不会有什么影响,比如你在银行存款,但是你存的钱可能被银行拿去做什么事情了,最后只是你的钱又返回来了,但是这个过程你知道吗,不知道,你只关心结果变没变。 但如果实在一些特定场景,比如
明白了,非常感谢!
亦夜 2020-11-16
  • 打赏
  • 举报
回复
普通场景下,ABA问题不会有什么影响,比如你在银行存款,但是你存的钱可能被银行拿去做什么事情了,最后只是你的钱又返回来了,但是这个过程你知道吗,不知道,你只关心结果变没变。 但如果实在一些特定场景,比如

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧