各进程在使用系统资源时,应注意系统产生死锁问题。下面先介绍什么是死锁。
1 死锁的概念
1. 死锁的定义
所谓死锁,是指各并发进程彼此互相等待对方所拥有的资源,且这些并发进程在得到对方的资源之前不会释放自己所拥有的资源。从而造成大家都想得到资源而又都得不到资源,各并发进程不能继续向前推进的状态。

2. 死锁的起因
死锁发生原因:
只有4个条件都满足时,才会出现死锁。
(1) 互斥
(2) 不剥夺条件:
(3) 部分分配:
2 死锁的排除方法
处理死锁的基本方法可归结为以下3种:
|
方法 |
资源分配策略 |
各种可能模式 |
主要优点 |
主要缺点 |
|
预防 Prevention |
保守的;宁可资源闲置 |
一次请求所有资源<条件1> 资源剥夺 <条件3> 资源按序申请 <条件4> |
适用于作突发式处理的进程;不必剥夺 适用于状态可以保存和恢复的资源 可以在编译时(而不必在运行时)就进行检查 |
效率低;进程初始化时间延长 剥夺次数过多;多次对资源重新起动 不便灵活申请新资源 |
|
避免 Avoidance |
是“预防”和“检测”的折衷(在运行时判断是否可能死锁) |
寻找可能的安全的运行顺序 |
不必进行剥夺 |
必须知道将来的资源需求;进程可能会长时间阻塞 |
|
检测 Detection |
宽松的;只要允许,就分配资源 |
定期检查死锁是否已经发生 |
不延长进程初始化时间;允许对死锁进行现场处理 |
通过剥夺解除死锁,造成损失 |
1. 死锁的预防
死锁的预防:是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件。
预防死锁的三种策略:
打破死锁资源的互斥和不可剥夺这两个条件
缺点:不能解决访问那些不允许被同时访问的资源时所带来的死锁问题。
打破资源的部分分配这个死锁产生的必要条件
缺点:在许多情况下,一个进程在执行之前不可能提出它所需要的全部资源。
无论所需资源何时用到,一个进程只有在所有要求资源都得到满足后才开始执行。
对于那些不经常使用的资源,进程在生存过程期间一直占用它们是一种极大的浪费。
降低了进程的并发性。
打破死锁的环路条件
缺点:限制了进程对资源的请求,而且对资源的分类编序也耗去一定的系统开销。
2. 死锁的避免
死锁的避免:在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。
3. 死锁的检测和恢复



网络工程师