CAS-什么是ABA问题
来源:互联网 发布:知乎怎么删除消息 编辑:程序博客网 时间:2024/05/01 22:56
所谓CAS指Compare and Set(或Compare and Swap)。现在几乎所有CPU指令都支持CAS,如X86的CMPXCHG汇编指令。CAS通常被视为无锁(lock free)数据结构的基础
CAS:对于内存中的某一个值V,提供一个旧值A和一个新值B。如果提供的旧值V和A相等就把B写入V。这个过程是原子性的。
CAS执行结果要么成功要么失败,对于失败的情形下一班采用不断重试。或者放弃。
ABA:如果另一个线程修改V值假设原来是A,先修改成B,再修改回成A。当前线程的CAS操作无法分辨当前V值是否发生过变化。
关于ABA问题我想了一个例子:在你非常渴的情况下你发现一个盛满水的杯子,你一饮而尽。之后再给杯子里重新倒满水。然后你离开,当杯子的真正主人回来时看到杯子还是盛满水,他当然不知道是否被人喝完重新倒满。解决这个问题的方案的一个策略是每一次倒水假设有一个自动记录仪记录下,这样主人回来就可以分辨在她离开后是否发生过重新倒满的情况。这也是解决ABA问题目前采用的策略。作者:寻寒
链接:https://www.zhihu.com/question/23281499/answer/24112589
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ABA问题:
- P1读取指定内存的值为A
- P1被挂起P2运行
- P2将指定内存的值从A修改为B,再改回A。
- 再次调度到P1
- P1发现指定内存的值没有变,于是继续执行。
0 0
- CAS-什么是ABA问题
- CAS与ABA问题
- CAS和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS和ABA问题
- java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java CAS 和ABA问题
- Java中的CAS、ABA问题、ABA问题解决方案
- CAS操作ABA问题发生的场景
- 多线程(十二)CAS 和ABA问题
- 并发编程cas的aba问题
- Linux下用户组、文件权限详解
- Roll a Ball 项目中遇到的问题
- 移动开发 微信小程序,一个有局限的类似 React Native 轮子!
- 最短路径
- Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总
- CAS-什么是ABA问题
- 地图服务报 error #2035
- 一句话小知识点
- Retrofit 2 使用(转)
- 元字符--正则表达式
- echart前端
- 最全的常用正则表达式大全
- ANDROID内存优化(大汇总——全)
- 制作内核开机动画图