死锁的四大条件,如何避免死锁

一、死锁的四大条件

互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。

循环等待条件: 若干进程间形成首尾相接循环等待资源的关系

 

二、如何避免死锁

1、系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。 

2、银行家算法

  • 申请的贷款额度不能超过银行现有的资金总额
  • 分批次向银行提款,但是贷款额度不能超过一开始最大需求量的总额
  • 暂时不能满足客户申请的资金额度时,在有限时间内给予贷款
  • 客户要在规定的时间内还款

如果操作系统能保证所有进程在有限时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的。

 

三、死锁具体避免方法

1)设置加锁顺序

假如在多线程中,一个线程需要锁,那么他必须按照一定得顺序获得锁。 

2)设置加锁时限

在获取锁的时候尝试加一个获取锁的时限,超过时限不需要再获取锁,放弃操作对锁的请求。

3)死锁检测

当一个线程获取锁的时候,会在相应的数据结构中记录下来,相同下,如果有其他线程请求锁,也会在相应的结构中记录下来。当一个线程请求失败时,需要遍历一下这个数据结构检查是否有死锁产生。

参考:https://blog.csdn.net/qq_38663729/article/details/80058980

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘广宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值