概念-乐观锁、悲观锁

听到 乐观锁、悲观锁的概念,搜了下,摘要出为能理解的尽量短的文字说明:

 

概念

悲观锁:正常的经典使用方式是叫悲观锁,先取锁,成功取得后才做操作(不论是读还是写)。

乐观锁:乐观并发控制相信事务之间的数据竞争(data race)的概率是比较小的,因此尽可能直接做下去,直到提交的时候才去锁定,所以不会产生任何锁和死锁。

 

 

其他说明

乐观锁,提交的时候,如果冲突,则返回给用户异常信息,让用户决定如何去做。

 

悲观锁主要分为共享锁 和排他锁

  • 共享锁【shared locks】又称为读锁,简称 S 锁。顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
  • 排他锁【exclusive locks】又称为写锁,简称 X 锁。顾名思义,排他锁就是不能与其他锁并存,如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁。获取排他锁的事务可以对数据行读取和修改。

这么看自己实际使用的时候,普通的锁,内部应该就是个排他锁;而读写锁似乎内部一个排他锁和一个共享锁组成,读的加锁和解锁过程应该是用了内部共享锁,写的加锁和解锁则应该是用了内部的排他锁。

 

怀疑似乎这概念应该是 从java的 CAS  包的实现传播开的

参考

主要参考摘录自:https://www.jianshu.com/p/d2ac26ca6525

上一篇:js原生选项卡(自动播放无缝滚动轮播图)二


下一篇:go 的数据类型