死锁产生的4个必要条件
互斥条件
某种资源一次只允许一个进程访问,即该资源一旦分配给某个进程,其他进程就不能再访问,直到该进程访问结束。
进程 A B 都需要 用到资源 C,A用着,B就用不了,直到A用完为止,B才能用。
占有且等待条件 ( 请求与保持条件 )
一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源。
A 在 用 C 时,B 这个 进程 还没有结束 他占着 C之外的资源 还在等着 A 把 C 用完
不可抢占条件
已经分配的资源不能从相应的进程中被强制地剥夺。
一个进程不能因为需要该资源,就去把别的进程占有的资源抢过来。
A 用着 C ,B也 要用 C ,B 不能 把 C 抢过来,自己用。他不能终止A 对 C 的占有。
循环等待条件
存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源
光是 A B 满足以上三个条件 ,对 C 一个资源 进行占用,无法形成死锁。那么 在来个 小D.
A占着D,等着C。B 占着C ,等着D。谁都不让着谁。这样这两个进程 就发生了冲突。
这就 是 人性的毁灭 道德的沦丧。。。。啊呸 !
这就是 死锁!!!!
划重点 ,小本本记下来,要考的啊。
避免死锁
死锁预防, 提前预防多个进程发生死锁。
死锁有四个 必要条件,那么预防死锁,就去破坏这四个条件即可。
由于 第一个 互斥条件,非共享资源所必须的,不仅不能改变,还应加以保证。
所以 重点 破环 其他三个 条件:
a、破坏“占有且等待”条件
b、破坏“不可抢占”条件
c、破坏“循环等待”条件
这个就可能预防死锁产生。
另外还有一种方法就是
通过算法 ,在分配资源时判断是否会出现死锁,只在不会出现死锁的情况下才分配资源。
如 银行家算法
以后再继续更新,2018-10-12.
预防详情这个链接有:
https://blog.csdn.net/guaiguaihenguai/article/details/80303835