第五章 死锁
5.1 死锁概念
-
5.1.1 五个哲学家就餐问题
-
5.1.2 死锁的定义
- (1)两个/多个进程无限期地等待永远不会发生的条件的一种状态
- (2)已经拥有了资源又申请其他进程的资源
5.2 死锁的原因
- (1)系统资源有限
- (2)并发进程推进顺序不当
- (3)不正确的P-V操作(如生/消问题中的P(empty)和P(mutex)的顺序问题
- (4)死锁结论:参与死锁的进程至少有2个;已有2个占有的资源;死锁的进程一直在等待;死锁大量的消耗资源
5.3 死锁预防策略
-
5.3.1 必要条件
- (1)互斥条件:独占性
- (2)不剥夺条件:不允许抢夺独占的资源
- (3)部分分配条件:边运行边临时申请资源
- (4)环路条件:多个进程构成占用环路
-
5.3.2 打破方式
- (1)预防死锁:四者选其一即可预防死锁
- (2)避免死锁:在资源分配过程中计算不死锁的分配,并避免其产生
- (3)检测和恢复死锁:允许死锁发生并即时清楚死锁状态
- (4)预先静态分配法:(破坏部分分配条件)具体为在程序运行时一次性将资源全部都分配给他
- (5)有序资源分配法:(即打破环路条件)将每个资源设定唯一编号,每次申请资源时规定只能申请更大编号的资源(在分配时检测序号是否是递增的,而拥有最大资源的进程必会执行完)
- (6)鸵鸟策略:Windows和LINUX均采用此策略,既不处理死锁(解决死锁开销太大,得不偿失)