并发处理中通常需要解决的两个问题:死锁和饥饿
产生死锁的原因主要是
- 系统资源不足。
- 进程运行推进的顺序不合适。
- 资源分配不当等。
死锁的条件
死锁有三个必要条件:
·1.互斥。一次只有一个进程可以使用一个资源。
2.·占有且等待。当一个进程等待其他进程时,继续占有已经分配的资源。
·3.不可抢占。不能强行抢占进程已占有的资源。
前三个条件都只是死锁存在的必要条件,但不是充分条件。对死锁的产生,还需要第四个条件:
·4.循环等待。存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源。
死锁的处理方法
- 死锁预防
破坏死锁的四个必要条件中的一个或多个来预防死锁。
- 死锁检测与死锁恢复
不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。
(一)每种类型一个资源的死锁检测
(二)每种类型多个资源的死锁检测
(三)死锁恢复
利用抢占恢复
利用回滚恢复
通过杀死进程恢复
- 死锁避免
- 银行家算法:(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。