CAS(底层原理以及存在的问题解决方法)

CAS(compare and swap比较并且交换 )

作用:在不使用锁的情况下支持多线程,CAS又被称作:轻量级锁,无锁,自旋锁(很形象,后续会解释)

在这里插入图片描述
整体过程(举例:多线程情况下实现对某个数字A实现加1操作)
首先读取这个数字A当前值,执行+1操作获得结果值A+1,接下来会进行比较并且交换操作:将原先读取的当前值与当前新值进行比较,相等再进行替换操作,用结果值替换原先的值,不相等会重复执行以上步骤,这一步自旋的过程呼应上面说的自旋锁

存在的问题:
1、虽然我们比较结果相同,但是会不会在交换的时候数据已经被改过了;
解释:先说结论,CAS比较并且交换在汇编层面是通过一条指令来执行,lock cmpxchg(重点),lock保证执行比较并且交换过程是一个原子性的操作;

2、我们比较数据是否相等,有没有可能多个线程对数据已经进行修改,导致我们判断数据没有变化;
解释:有可能,ABA这个名词也是因此命名,针对这个问题,有些情况没有影响,有些情况有影响;
解决的办法:版本控制或者直接设置Boolean的flag记录数据有没有被修改过;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值