CAS

乐观锁与悲观锁

Synchronized这种独占锁,属于悲观锁。

悲观锁始终假定会发生并发冲突,因此会屏蔽一切可能会违反数据完整性的操作。

乐观锁假设不会发生并发冲突,因此只在提交操作时检查是否违反数据完整性,如果提交失败,则会进行重试。乐观锁最常见的就是CAS了。

 

CAS(Compare and Swap)

是一种高效实现线程安全性的方法

支持原子更新操作,适用于计数器,序列发生器等场景

属于乐观锁机制,号称lock-free

CAS操作失败时有开发者决定是继续尝试,还是执行别的操作。因此执行失败的线程不会被阻塞挂起

 

CAS思想

包含三个操作数-内存位置(V)、预期原值(A)、新值(B)

执行CAS时,将内存位置的值与预期原值进行比较,如果相等的话,那么处理器会将该位置的值更新为新值,否则处理器不做任何操作

 

缺点

1.若循环时间长,则开销很长。如果CAS操作失败,会一直进行while的尝试,如果CAS长时间一直不成功,可能会给CPU带来很大的开销。

2.只能保证一个共享变量的原子操作。如果想要保证多个变量的线程安全,只能使用Synchronized

3.ABA问题:如果内存地址V首次读取数据的值是A,其后被其他线程改成了B,而后又改成了A。在CAS准备赋值时检查到它的值仍然为A,CAS就会误认为该变量没有被其他线程改变过。

解决ABA问题:AtomicStampedReference

通过控制变量值的版本,来保证CAS的正确性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值