请稍等 ...
×

采纳答案成功!

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

事务下的锁

goods_1【进程1】首先加锁,然后进行库存减少,成功会解锁,此时进行goods_2【进程1】的加锁,

与此同时进程2的goods_1获取到了锁,然后获取到了商品数量为100。因为进程1的事务没有执行完成,所以库存减少并没有写入数据库,此时还是会超卖啊。。。这段程序应该是有bug,不能在事务里加分布式锁吗?


https://img1.sycdn.imooc.com/szimg/600b963f0907851d17341144.jpg


https://img1.sycdn.imooc.com//szimg/600b96f509c3dbd411140466.jpg

正在回答 回答被采纳积分+3

2回答

鼎晨要住顶层 2021-06-12 16:23:31

同学,我也被这个问题困住了,想问下你后面解决了么?

0 回复 有任何疑惑可以回复我~
提问者 三生三途 2021-01-23 11:47:18

这里因为不是全局锁,是针对某个商品的锁,当商品解锁后,商品所属事务并没有结束,所以另外一个人获取到锁后读取的数量还是100,没有更新。。是不是要和乐观锁一起用呢。。

0 回复 有任何疑惑可以回复我~
  • 提问者 三生三途 #1
    感觉用乐观锁也没啥用啊。。因为第一个事务都没有更新,version肯定也不会变化了。。
    回复 有任何疑惑可以回复我~ 2021-01-23 11:50:00
  • bobby 回复 提问者 三生三途 #2
    乐观锁肯定行啊,课程中详细的说明了乐观锁的原理,但是要注意,乐观锁只能用于数据库的执行上,不能像redis的分布式锁一样可以作用于任何代码上
    回复 有任何疑惑可以回复我~ 2021-01-24 13:28:56
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信