2 chenxizyq chenxizyq 于 2015.05.26 11:07 提问

乐观锁 怎么防止并发,请求大神解惑

大神们,我乐观锁还是不明白 能帮我解惑吗? 例: 两个请求(A、B)同时都会更新一条记录, A更新(判断版本通过)这时A事务还没结束(后面还有逻辑), 此时,B也更新(判断版本也通过)B事务结束, 后面A结束,这样A事务的更新不就错了吗(脏读) 要怎么处理呢? 在线等待大神解惑 谢谢!

3个回答

redy_bai
redy_bai   2015.05.26 11:28

比如对于领取食物的操作:
time1: A请求从框里拿一个面包(框里食物状态版本号V1)
time2:B请求从框里拿一个面包(框里食物状态版本号V1)
time3:师傅从框里拿了一个面包给B(框里食物状态版本号V1)
time4:师傅要从框里那一个面包给A,发现食物状态版本号变了,(也许现在框里的食物不够给A的啦),于是**驳回了**A的请求。

乐观锁在数据版本发生改变的时候(其他进程对数据进行了更新)拒绝对数据的更新操作。所以,被拒绝的进程**更新失败**,也就不会存在脏读或脏写了。

chenxizyq
chenxizyq 不对吧, 你看我上面的 A在判断通过时事务没有提交, 这时B也判断通过了, 接着B提交, 后面A提交 这时A的是错的。 A在提交时 之前已判断过 所以就绕过了 还是脏读啊
2 年多之前 回复
chenxizyq
chenxizyq   2015.05.26 12:30

不对吧, 你看我上面的 A在判断通过时事务没有提交, 这时B也判断通过了, 接着B提交, 后面A提交 这时A的是错的。

A在提交是 之前已判断过 所以就绕过了 还是脏读啊

chenxizyq
chenxizyq   2015.05.26 12:31

不对吧, 你看我上面的 A在判断通过时事务没有提交, 这时B也判断通过了, 接着B提交, 后面A提交 这时A的是错的。

A在提交时 之前已判断过 所以就绕过了 还是脏读啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!