CAS——Compare And Swap

CAS是一种乐观锁,相对的那就要提到悲观锁。

悲观锁认为每次去拿取数据时都认为会被人修改,所以每次取数据都会上锁不允许别人访问;

乐观锁认为每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断—下是否被更新。

悲观锁的实现方式就是Java中的synchronized等独占锁,乐观锁的实现方式是添加版本号字段或CAS算法等。

CAS也被成为无锁机制,通过原子性的操作在多线程环境下实现同步和线程安全。

由于上锁后会使得线程阻塞是程序运行性能降低,甚至导致死锁问题等,所以通过CAS乐观锁能一定程度上避免这些问题。

实现原理:

        根据内存地址V读取变量的当前值→

        将当前值与期望值A进行比较,如果相等则继续,如果不相等则返回操作失败→

        如果相等则将变量的值更新为新值B

CAS的实现方法有:

        compareAndSwapObject()、compareAndSwapInt()、compareAndSwapLong()等

CAS乐观锁机制的实现需要保证操作的原子性和可见性,同时要避免ABA问题的出现,因为CAS无法判断旧期望值A和内存V取值是同一个版本(无法确保内存数值未更改过还是已经进行更改又有操作将其变回了同样数值)

        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值