【Mysql】什么是死锁?如何避免死锁

死锁

1. 什么是死锁(争抢资源、互相等待)

多线程因为争抢资源而出现的互相等待的状态

2. 死锁产生的四个必要条件

1. 互斥

当资源被一个线程使用(占有)时,别的线程不能使用(如:张三拿到了苹果,李四就不能拿苹果了)

2. 不可抢占

资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放(如:李四不能从张三手里抢苹果,只能等张三主动放弃苹果)

3. 请求和保持

当资源请求者在请求其他的资源的同时保持对原有资源的占有(如:张三拿到了苹果,他还可以去那香蕉,并不冲突)

4. 循环等待

存在一个等待队列(如张三等李四的香蕉,李四在等张三的苹果,僵住了)

3. 如何避免死锁

打破上诉四个必要条件其中一个(除了互斥),就可以有效避免死锁

  1. 破坏“请求和保持”条件:所有的进程在开始运行之前,必须一次性的申请其在整个运行过程各种所需要的全部资源

  2. 破坏“不可抢占”条件:当一个已经持有了资源的进程在提出新的资源请求没有得到满足时,它必须释放已经保持的所有资源,待以后需要使用的时候再重新申请

  3. 破坏“循环等待”条件:可以通过定义资源类型的线性顺序来预防,可以将每个资源编号,当一个进程占有编号为i 的资源时,那么它下一次申请资源只能申请编号大于i 的资源。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值