乐观锁与悲观锁的简单区分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乐观锁与悲观锁的简单区分相关的知识,希望对你有一定的参考价值。

1、锁的出现,是因为并发读写同一个数据的时候,需要进行数据完备性的保护,避免脏读、脏写等。

2、乐观锁,需要在事务中加锁,在读取数据的时候,不必在意数据是否已经被修改了(即允许脏读);但是在写入数据的时候,要检查数据是否已经被修改了(可以通过版本号等机制控制),如果被修改那么就通知事务调用者,事务失败了。

3、悲观锁,需要在事务中加锁,在读取写入数据的时候,都需要考虑数据是否已经被修改,如果被修改了,那么就通知事务调用者,事务被阻塞了,进入等待状态。

4、从性能上看,乐观锁性能会高一些,因为悲观锁要检查更多的数据变动情况,而且还会存在阻塞。

5、从使用场景上看,悲观锁一般用于要求很强的数据一致性的系统,读写都不允许“脏”,乐观锁一般用于一致性稍弱的系统,不允许脏写,但是允许脏读。

 

概念引申:数据库的各种锁,分布式系统的CAP原则。

以上是关于乐观锁与悲观锁的简单区分的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-1117 悲观锁与乐观锁的实现

悲观锁与乐观锁的区别

面试必备|乐观锁与悲观锁的大揭秘

MYSQL悲观锁与乐观锁

数据库乐观锁与悲观锁

Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS