为了提前预防进程互相等待的死锁局面,Dijkstra在1968年提出了银行家算法,这套规则就好比给系统排定了一个官方的执行顺序。它通过计算保险箱里的资源余量,判断每个进程的需求,把满足需求的进程按照特定顺序排队。只要剩下的资源数够分配给排队的进程,系统就能安全运转;如果余量不够,就需要先扩容资源。银行家算法用三步操作就能打破僵局:第一步算出四种资源的剩余总量;第二步列出各进程需要补充的资源;第三步逐个检查顺序,确保每次都能发满资源。只要保证排队时每一步都有足够的剩余资源,系统就不会陷入停滞。我们可以用一道具体的题目来演示这个过程:首先算出A、B、C、D的剩余量分别是1、6、2、2。然后看每个进程还想要多少资源,比如P1要(0,0,1,2)。接着把它们按顺序放进保险箱里检查:先放P1没问题,再放P4也安全,P5也符合条件。最后依次验证P2和P3都能顺利通过。只要剩下的资源一直够用,不管怎么调整顺序都不会出现死锁;只要有一步资源不够用了,就说明系统处于不安全状态。简单来说就是:当且仅当剩余资源数大于等于需求时系统才稳;如果不够就必须先扩容,不然永远卡在这里。