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问题:

  1. P1读取指定内存的值为A
  2. P1被挂起P2运行
  3. P2将指定内存的值从A修改为B,再改回A。
  4. 再次调度到P1
  5. P1发现指定内存的值没有变,于是继续执行。
lock free算法中容易出现ABA问题
0 0
原创粉丝点击