死锁的4个必要条件、避免死锁、解除死锁
Contents
什么是死锁?
死锁是指多个进程在执行过程中,由于竞争资源造成 阻塞 的现象,如果没有 外力 的作用,永远无法推进下去。
死锁产生的4个必要条件
互斥条件请求和保持条件不剥夺条件环路等待条件
这4个条件是死锁的必要条件,只要系统发生了死锁,这些条件是必然成立的。所以想要预防死锁,我们可以 破坏 这4个条件来防止死锁。
互斥条件是指,在一段时间内,如果某资源已经被一个进程占用了,其他线程是只能等待,直到占有资源的进程释放资源为止。但一般情况下,有些资源是的确不能够同时访问的,这种互斥性还是需要保留的。请求和保持条件,当进程对其他资源的请求阻塞时,对自己已经获得的资源保持不放。如果通过一次性分配所有资源,就不会有新的请求了。不剥夺条件,是对于进程已获取的资源,在没有使用完之前,不能被剥夺,只能使用完后自己释放。这种不剥夺条件可以改为,如果进程没法获取全部的资源,就要释放自己已占有的资源。环路等待条件,是指进程发生死锁后,若干进程之间形成 环路 的 循环等待 关系。为了破坏环路等待条件,可以采用顺序资源分配法。系统给每个资源指定编号,并且规定每个进程必须按编号递增的顺序来请求资源,这样可以破坏环路等待条件,但这种算法必定会带来额外的开销。
避免死锁的方法(银行家算法)

避免死锁的方法有银行家算法,每个进程都要声明,在运行过程中所需要的每种资源类型的最大数目,这些数目一定不能超过系统里每种资源的最大总量,每当进程请求资源时,系统需要判断分配资源后,系统会不会处于安全状态(有至少一个安全序列,一定不会发生死锁),如果不处于安全状态,就要等待。
解除死锁
- 从死锁进程剥夺资源
- 终止部分或者全部进程