CAS机制

2021-05-17  本文已影响0人  垂直居中的句号

悲观锁: 假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。依靠底层提供的锁机制,会导致其他所有需要锁的线程都挂起。

synchronized独占锁 ,是一种悲观锁。

乐观锁:每次都不加锁而是假定没有冲突去完成某项工作,如果冲突会一直重试直到成功。

乐观锁会导致脏读

(脏读就是读取未提交的内容,事务A读到事务B未提交的内容,而事务B因为冲突执行失败回滚。事务A读到了B无效的修改;不可重复读:就是前后多次读,内容不一致;幻读:就是前后多次读,总数不一样)

乐观锁会基于数据库版本记录实现,事务A读取数据时也读到版本号,修改后写入的时候,会比较版本号,如果数据库版本号比事务A的大,则说明有其他事务修改了,视为过期数据,否则修改。

CAS锁机制就是  乐观锁

三个操作数 V内存位置的值,预计期望值A,更新值B

比较V与A是否相等

相等则更新为B

返回操作成功

ABA问题

就是事务A预先获取了值为1,这是A阻塞,事务B修改成2后,事务C修改成1,此时事务A又比较值是对的,但实际上已经修改了,银行取钱问题。

引入版本号比较,可解决ABA问题。

volatile 保证了共享变量的可见性,不保证原子性。

上一篇下一篇

猜你喜欢

热点阅读