欢乐锁和悲观锁的小问题

前辈们好!问题如下:

面试的时候经常被问道欢乐锁和悲观锁的区别,小弟想知道,什么情况下用欢乐锁,什么情况下用悲观所,以及如何实现欢乐锁和悲观锁?

问题有点多,谢谢回答。

阅读 3k
3 个回答
新手上路,请多包涵

悲观锁是显式的,乐观锁是MVCC

简单来说. 乐观锁就是先让所有并发访问都能访问到数据. 在他们提交数据的时候做版本判断. 如果版本不对. 就提交失败. 悲观锁就是 在并发访问的时候排队. 也可以看作是串行的提交. 比如redis. 用的就是乐观锁. 并发提交时. 先让大家都获取一个类似于版本记录的值. 然后真正提交时. 会对比这个值. 如果不符合就提交失败. 这样保证只有一个能提交成功. 而悲观锁会在提交前 获取一个类似于写锁的东西. 只准一个人在那写. 不能并发. 比如mysql如果你select 的时候使用了 for update 这样的语句. 也就相当于手动加上了一个悲观锁.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题