您的位置:首页 > 编程语言

并发编程cas的aba问题

2017-06-15 18:22 99 查看
多线程环境下,两个线程A,B可能会对共享数据m进行操作。为了保证一个线程在读到数据跟写入数据之间没有被其他线程修改过,使用cas解决。

cas:更改之前先判断旧值是否有变化,如果没有变化,认为没有线程对该共享值做过操作。(

这种认为是有一下问题的,

      

线程A线程B
T1读m值为1 
T2 读m值为1
T3 查询m值是否为1,并更新m值为2
T4 读m值为2
T5 查询m值是否为2,并更新m值为1
T6查询m值是否为1,并更新m值为2 
  
B线程已经对数据做了两次修改,而A却并不清楚这个修改,以为是没有任何线程对其做修改。

这个问题称之为aba。

aba问题解决:使用修改字段加时间戳,在cas判断m值的时候,同时对时间戳进行判断。如果时间戳不一样,说明其他线程对该字段进行了修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: