请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

乐观锁的问题

老师您好.
在讲乐观锁的时候,您说 “乐观锁并不会使用数据库提供的锁机制” 您的意思是不会去手动的获取数据库提供的锁吧,在执行update语句时数据库就会默认使用排它锁吧,只是这个排它锁会在执行完语句后自动解锁.
如果不自动使用排它锁的话,整个乐观锁都会有问题吧,比如两个session同时修改一条语句判断表中的version都是0,然后同时进行修改,修改后version变为1. 我的理解是正确的吗?老师指点.

正在回答

1回答

翔仔 2019-12-20 03:15:35

同学好,视频里表达的意思是乐观锁机制不在mysql中实现,而是放到了程序里面,由程序进行事务的控制,比如spring,然后按照版本号去控制。底层执行update的时候虽然也涉及到数据库的锁,但是乐观锁是上层实现的

0 回复 有任何疑惑可以回复我~
  • 非常感谢!
    回复 有任何疑惑可以回复我~ 2019-12-20 16:56:11
  • 但是乐观锁的实现,也是要依赖着执行update时加的锁吧,不然并发情况下同时判断了version为0,并且同时执行了version+1. 加锁后两个线程不能同时执行,保证了多线程执行下的原子性. 是怎样吗,这些都是我yy的.
    回复 有任何疑惑可以回复我~ 2019-12-20 17:06:21
  • 翔仔 回复 提问者 weixin_慕莱坞0474613 #3
    同学好,其实可以不判断,同时取出version为0,执行成功后,总有一方先把version置为了1并提交,另外一方则肯定失败,因为此时version不为0了
    回复 有任何疑惑可以回复我~ 2019-12-21 00:42:54

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信