CAS算法简练讲解及ABA问题的解决

什么是CAS机制?

一句话就是:在没有锁的状态下,可以保证多个线程对一个值的更新

优势:响应时间短

CAS算法的执行过程

  1. 读取内存位置的当前值。
  2. 对当前值进行计算,计算完成后检查内存中当前值是否仍为读取的值
  3. 如果相等,则将新值写入内存位置。如果写入成功,则CAS操作成功
  4. 如果不相等,则表示其他线程已经修改了该内存位置的值,CAS操作失败。
  5. 如果操作失败,则返回第一步,重新尝试。

接下来举一个例子进行示范:

例子概述:一个线程现在需要把一个值1改为2,但是只能在该值基础上进行增1操作

  • 第1步:现在读取当前值1,然后进行加1运算,

  • 第2步:计算结束后与当前的该值比较,如果该值仍为1,则将+1后的值赋给它变成2,如果当前值已经不是1了,那么就是被其他线程修改过了,此时肯定不可以将1赋给该值,需要重新读取

  • 第3步:读取被其他线程修改过的该值,进行计算,然后再和该值进行对比

  • 重复以上过程

CAS操作是原子的,即整个读取、比较和更新操作在执行期间不会被其他线程中断或修改,保证了多线程环境下的数据一致性和线程安全性。

CAS算法衍生的ABA问题

什么是ABA问题?

概述:当线程1将一个值从0改成1时,在其计算的这段时间里,有其他线程将该值从0改为1又改为0,而线程1是不知道的,此时的0已经不是之前的0了

解决方法:给值加一个版本号,每次修改增加版本号或者用bool标记一下,都可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值