死锁 deadlocks
死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁。

01 产生死锁的4个必要条件:
资源互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不抢占条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。


02 死锁的解除与预防方法如下:
鸵鸟策略:把头埋在沙子里,假装根本没发生问题。
死锁预防:确保系统永远不会进入死锁状态。(理解了死锁的原因,破坏产生死锁的4个必要条件,就可以最大可能地避免、预防和解除死锁。)
破坏互斥条件:把互斥的共享资源封装成可同时访问。

破坏占有和等待条件:进程请求资源时,要求它不持有任何其他资源;仅允许进程在开始执行时,一次请求所有需要的资源。

破坏不可抢占条件:如进程请求不能立即分配的资源,则释放已有占有资源;只在能够同时获得所有所需资源时,才执行分配操作。

破坏环路等待:对资源排序,要求进程按顺序请求资源。

死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源。
银行家算法:
- 如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
- 如果一个状态不是安全的,需要拒绝进入这个状态。



死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复。
检测:每种类型一个资源的死锁检测可采用有向图环路检测算法;每种类型多个资源的死锁检测采用基于矩阵的算法。恢复:进程终止;资源抢占;进程回退。






参考资料
- 王道考研
本文深入探讨了死锁的概念,分析了其产生的四个必要条件,包括资源互斥、请求与保持、不抢占及循环等待。同时,文章详细介绍了死锁的预防、避免和检测方法,如破坏产生死锁的条件、银行家算法以及死锁检测和恢复策略。
1859

被折叠的 条评论
为什么被折叠?



