《并发编程》--22.死锁产生的条件和动静态避免死锁

死锁产生的四个必要条件包括互斥、不可抢占、占有申请和循环等待。静态策略通过打破这些条件来避免死锁,如资源的有序分配。银行家算法是一种动态策略,确保资金分配不会导致死锁,保证顾客在有限时间内得到并归还贷款。
摘要由CSDN通过智能技术生成

产生死锁的必要条件:


1. 互斥条件:就是一个资源同时只能有一个进程占有,不能有两个或是两个以上的占有。
2. 不可抢占条件:在一个进程所获取的资源在未使用完毕之前,资源申请者不能强行的从资源占有者手中抢夺资源。
3. 占有申请条件:进程已经占有了一个资源,但是有申请新的资源;但是新申请的资源已经被别的进程占有了,此时该进程就会阻塞,但是在获取申请的资源之前他还会一直占有已占有的那个资源。
4. 循环等待条件:存在一个循环等待序列,p1等待p2,p2等待p3,p3等待p1。形成一个进程循环等待。
上述四个条件在死锁是会同时发送,也就是只要一个必要条件不通过,则就不会产生死锁。

 

静态策略:避免死锁

(1)打破互斥条件:允许进程同时访问某些资源,但是,有的资源不允许被同时访问。
(2)打破不可抢占的条件:就是说允许进程强行从资源的占有者那里抢夺资源。这种方法实现起来很困难,会降低性能。
(3) 打破占有申请条件:可以实现资源预先分配策略,在进程运行前一次性向系统申请他所需要的全部资源。如果进程所需的资源不能满足,则不分配任何资源,进程暂时不运行。(问题:1.在很多时候,一个进程在执行之前不可能知道它所有的全部资源,进程在执行的过程中,是动态的。2.资源利用率低。3.降低进程的并发性,因为资源有效,有加上存在浪费,能分配的所需全部资源的进程个数必然很少。)
(4)打破循环等待条件:实行资源的有序分配策略,把资源事先分类编号,按号分配,使进程在申请,占用资源时候不能形成环路,所有进程对资源的请求必须严格按照资源号递增的顺序提出,进程占用了小号的资源,才能申请大号资源。就会形成环路。(缺点:限制进程对资源的请求,同时对系统中的所有资源合理编号也是很有困难的,增加额外的系统开销。)

 

 


动态策略:银行家算法可以避免死锁

银行家算法需要确保以下四点:

当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客顾客可以分期贷款, 但贷款的总数不能超过最大需求量
当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可- 推迟支付࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值