死锁及示例

       死锁需要满足四个条件

       1.互斥

       2.持有并等待

       3.不可剥夺

       4.环形

       通常只需要打破其中任意一个就可以解决死锁的问题,通常可以打破第四条,例如资源有序分配的规则。

       下面举一个mysql官方文档的死锁例子。

        有两个客户端ClientA和ClientB

        1.ClientA执行以下sql(持有s锁)

        

START TRANSACTION;

SELECT * FROM people WHERE id = 4 LOCK IN SHARE MODE;

       2.ClientB执行以下sql(尝试获取X锁)

    

START TRANSACTION;

DELETE FROM people WHERE id = 4;

    3.ClientA执行以下sql(尝试获取X锁)

  

DELETE FROM people WHERE id = 4;

   这个时候就会发现死锁,clientB由于ClientA已经持有s锁,所以需要等待ClientA释放s锁,才能获取x锁,而ClientA由于ClientB在等待获取x锁,所以也在等待获取x锁,这样mysql会先将

事务B停止,因为检测出deadlock,让B释放锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值