CAS的ABA问题与解决办法

CAS的核心操作就是比较V值与A是不是一致,如果一致,则将V更新为B。如果V先被线程1更新为C,又被线程2更新为A,最后当前线程进行CAS操作时,看到V的值还是A,认为可以将V更新为B,但是某些场景下,ABA被认为是发生了变化,需要重新执行计算。

产生问题的原因:缺失足够多的信息。

解决方案:增加信息量,原来要校验并更新1个值,现在校验并更新2个值,包括原来要更新的值和一个版本号。

Java原子类库提供的AtomicStampedReference和AtomicMarkableReference。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值