乐观锁与悲观锁+死锁

乐观锁 VS 悲观锁

1)悲观锁:就是很悲观,每次去拿数据的时候都认为别人会修改, 所以每次在拿数据的时候都会上锁。这样别人想拿这个数据就会 block 直到它拿到锁。传统的关系型数据库就用到了很多这种机制,比如行锁,写锁等,都是在操作之前上锁。

2)乐观锁:就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。适用于多读,比如 write_condition. 两种锁各有优缺点,不能认为一种比一种好。

悲观锁大多数情况下,依靠数据库的锁机制。乐观锁大多基于数据版本,记录机制实现。数据版本。为数据增加一个版本标识,比如增加一个 version 字段。读数据时,将版本号一块儿读出,之后更新时,版本号加 1,将提交数据的版本号与数据库表对应记录的当前版本号进行对比。若提交的大于数据库里面的,则可以更新,否则认为是过期数据。将乐观锁策略在存储过程中实现,对外只开放基于此存储过程的数据更新途径,而不是将数据表直接对外公开。

乐观锁适用于写较少的情况,即冲突真的很少发生,这样可以省去了锁的开销,加大了系统的吞吐量。

死锁相关:https://blog.csdn.net/caozhao3344/article/details/77199552

猜你喜欢

转载自www.cnblogs.com/cing/p/8858364.html