关注两组代码中的第7行,相较之下死锁检测算法的条件更弱,只判定了 R e q u e s t [ i ] < W o r k Request[i]<Work Request[i]<Work就收回了进程 P i P_i Pi的资源。而银行家算法中判定了 N e e d [ i ] < W o r k Need[i]<Work Need[i]<Work才收回资源。
死锁检测算法仅仅是检测此刻有无死锁存在,如果 R e q u e s t [ i ] < W o r k Request[i]<Work Request[i]<Work为真,就说明进程 P i P_i Pi此刻并没有参与死锁,所以我们乐观地假定进程 P i P_i Pi后续也不会再申请更多的资源(很多应用场景下,都有这样的乐观假定),所以在测试时直接收回它所持有的资源。当然,如果这个乐观假定错了,后续的执行中出现了死锁,那么就会在后续的死锁检测算法执行时检测到。