并发事务死锁问题

1 场景

    一个事务中,需要用悲观锁锁多条记录(SELECT ** FOR UPDATE)。当有并发事务执行时,有可能发生死锁。

2 死锁概念

    死锁是指多个进程(线程)因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程(线程)都将无法向前推进。

3 死锁的原因解析

    假如存在这种情况,事务A需要先锁id为1的记录,再锁id为2的记录。事务B需要先锁id为2的记录,再锁id为1的记录。2个事务并发执行,就有可能发生死锁的情况。事务A锁了记录1,事务B锁了记录2,都在等对方释放自己的资源,从而产生死锁。
在这里插入图片描述

4 解决方案

  1. 设置锁超时时间、事务超时时间
  2. 资源排序,对要锁的记录排序,按相同的顺序申请锁
  3. 使用其他方案代替悲观锁For Update,比如乐观锁、缓存等
  4. 还看到一种方案,轮询锁,感兴趣的自行搜索
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值