。 这使得死锁不能同时满足四个Р必要条件, 从而限制了流程应用程序资源的活动, 以确保不会发生死Р锁。接下来,我们将介绍消除死锁的动态策略- 避免死锁。它不限制Р进程有关请求资源的命令。 相反, 它动态检查每个请求是否有进程发Р出的资源,并根据检查结果确定是否分配资源。换句话说,在资源分Р配过程中,如果可以预测出现死锁的可能性,则可以避免死锁。该方Р法的关键是确定资源分配的安全性。Р1. 安全顺序Р我们首先介绍安全性序列的定义: 所谓的系统是安全的, 这意味Р着系统中的所有进程都可以按照一定顺序分配资源并依次完成运行。Р该过程序列 {P1 , P2, ..., PN} 是安全序列。 如果有这样的安全序列,Р则系统是安全的;如果没有这样的安全序列,则系统不安全。Р安全序列 {P1 , P2 , ..., PN} 的组成如下: 如果对于每个流程PI,Р可以通过系统中当前可用资源的总和加上当前由系统占用的资源来Р满足其所需的其他资源。 所有进程 PJ, 然后 {P1 , P2 , ..., PN} 是一个Р安全序列,系统处于安全状态,不会进入死锁状态。Р尽管在有安全序列时必须没有死锁, 但是当系统进入不安全状态РР(同时发生四个死锁的必要条件)时,可能不会发生死锁。当然,死Р锁后,系统必须处于不安全状态。Р2.Banker 算法Р一句话:Р银行家的算法首先尝试为该流程Р分配资源, 然后通过安全算法判断分配的系统是否处于安全状态。 如Р果不安全,则试用分配将作废,并且该过程将继续等待。Р当流程发出资源请求时, 银行算法将执行以下步骤来决定是否向Р其分配资源:Р)检查过程所需的资源是否已超出其声明的最大值。Р)检查系统当前是否有足够的资源来满足该过程的请求。Р)系统尝试为进程分配资源并获得新状态。Р4)如果新状态是安全的,则分配完成;如果新状态不安全,则Р将还原原始状态并阻止该过程。