关于乐观锁的实现
来源:3-15 锁模块之事务并发访问产生的问题以及事务隔离机制_2

修炼狂人
2019-02-28
老师,那个乐观锁实现中据说是不锁数据库的,那么当两条update同时来到数据库的时候,如何避免update1的条件判断后被挂起,进行update2的条件判断,然后在执行update1的更新,最后执行update2的更新?
eg:
update user set name= ‘John’,version=version+1 where id =1 and version = 0;
update user set name = ‘Test’,version=version+1 where id =1 and version = 0;
如果在update1的时候加了锁,那乐观锁所谓的加快效率,不加锁的意义何在呢?
写回答
1回答
-
翔仔
2019-03-01
同学好,首先加锁的话是会有开销的,也就是说程序会因为对锁的判断以及添加有额外的负担。其次,在同学设定的这个场景中,如果真的是像这样交叉执行的话,拆成各种条件查询和添加的步骤,那么换成是悲观锁的话,也会在各个添加步骤对是否获取到锁进行校验,并且会不断重置试,而乐观锁情况下只试一次。此外,如果不好理解,建议同学写一些相关的demo来对比两者性能:)
00
相似问题