
ABA问题
ABA的问题指的是在CAS更新的过程中,当读取到的值是A,然后准备赋值的时候仍然是A,但是实际上有可能A的值被改成了B,然后又被改回了A,这个CAS更新的漏洞就叫做ABA。
ABA可能带来的问题
1.数据结构破坏
案例:无锁链表的删除操作 假设链表结构为
A → B → C,线程 T1 和 T2
并发操作:
T1 读取头节点 A,准备删除
A,将头节点指向 B。
T2 抢先删除了 A 和
B,插入新节点 D,再将头节点恢复为
A(比如插入新节点 A → D)。
T1 执行 CAS,发现头节点仍为
A,于是将头节点指向 B。
结果:链表结构被破坏(B 可能已被释放,或
D 节点丢失)。
场景:无锁栈的出栈操作
初始状态:栈中有3个元素:A -> B ->
C,top指向A。
线程1执行出栈,读取top为A,准备更新为B,此时线程1被挂起。
线程2依次出栈A和B,再将A重新入栈,top仍指向A。
线程1恢复,CAS操作认为top未改变,更新成功,但栈已被破坏。





