关注两组代码中的第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后续也不会再申请更多的资源(很多应用场景下,都有这样的乐观假定),所以在测试时直接收回它所持有的资源。当然,如果这个乐观假定错了,后续的执行中出现了死锁,那么就会在后续的死锁检测算法执行时检测到。