什么是死锁?
官方定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
简单一点说:在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占用的资源。或者说每个进程所等待的事件都是由该组其他进程释放后才能占用的资源。但由于所有这些进程都已经无法运行,因此它们谁也不能释放资源,致使没有任何一个进程可以被唤醒,这样这组进程只能无限期地等待下去。
为什么会产生死锁?
进程申请顺序不当
同类资源分配不当
进程通信不当
死锁发生的必要条件
- 资源互斥使用(资源独占)
- 非剥夺控制(不可抢占)
- 零散请求
- 循环等待
这四个条件有一个不成立,就不会产生死锁。
死锁的危害?
轻则系统资源利用率下降、重则系统崩溃。
解决死锁的策略?
1.鸵鸟政策
2.积极防御
思想:以积极遏制未出发点
静态策略:进程创建时就由系统分配了所有需要的资源,然后才执行,并且以后没有资源申请请求,打破了零散请求,从而不会产生死锁
缺点:系统效率低,并发性下降,资源浪费严重
动态策略:执行时动态改变资源分配策略
缺点:实现复杂
优点:灵活性高、资源利用率高
3.事后处理法
提出原因:预防策略可以杜绝死锁发生,但是资源利用率低
如何防止死锁?
破坏死锁发生的四个必要条件中的其中一个就可以打破死锁现象
资源独占无法改变,我们从下面三个方面入手:
破坏非剥夺控制:采用优先级调度
破坏零散请求:采用静态分配
破坏循环等待:采用资源有序分配方式
死锁的避免?
单项银行家算法
银行要在客户第一次申请时声明最大资金需求量
满足最大需求后能及时归还资金
客户申请的贷款数量不超过银行自己拥有的最大值,银行尽量满足客户需求