CAS机制

作者: 垂直居中的句号 | 来源:发表于2021-05-17 23:05 被阅读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 保证了共享变量的可见性,不保证原子性。

    相关文章

      网友评论

          本文标题:CAS机制

          本文链接:https://www.haomeiwen.com/subject/imisjltx.html