乐观锁并发问题

乐观锁

乐观锁, 就是在每个表后面加一个version的字段, 由你自己去维护,修改一次+1,如果发现取出来的和version不相等 就说明过期
那么说明是脏数据,但是这样耗费一定的查询性能,因为必须要在update的时候 去检查version

问题

比如线程1给id=3这行数据进行操作,使用的是乐观锁,那么mysql内部会有个version
如果在线程1操作的同时,线程2也来了,也对id=3进行操作
如果线程2的sql先操作完了,会发生什么问题?

个人推测

线程1是不是对线程2的操作进行写覆盖了?但是不对啊,有乐观锁,乐观锁要比对version的

阅读 2.1k
1 个回答

虽然没有太看明白你具体想问啥 ...

不过觉得还是可以先看看这个

(可以)保证操作的原子性是数据库设计的基本原则之一,只要适当的利用 transaction 跟其他一些用于同步的机制,就不会出现一些操作插入另一些操作中间引起错误结果的情况。

这里并不需要在两个线程里加 mutex 互斥,而是由 mysql 来完成。

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