我从这里读到了Banker的算法,我知道检查我们是否可以为流程分配可用资源的一个条件是检查Work>需要,我想知道如果工作<需要但工作+分配>需要。
例如,有三个资源R1,R2,R3,并且我们已经分配了P1
(0,0,4(,它仍然需要(2,3,1(来完成它的工作。现在我们有(2,3,0(个可用资源。将这些资源提供给P1
并确保没有死锁是否安全?
例如,有三个资源R1、R2、R3,我们已经分配了P1(0,0,4(,它仍然需要(2,3,1(来完成它的工作。现在我们有(2,3,0(个可用资源。将这些资源提供给P1并确保没有死锁是否安全?
不,这是不安全的,因为系统具有类型为3
的0
资源((2,3,0(中的最后一个参数(,而P1
需要此类型的1
资源-(2,3(,1。
如果您的进程P1
需要所有资源,系统会将这样的请求放入等待列表(它缺少类型为3
的资源(。然后,所有其他进程也需要额外的资源,因此系统会将它们的请求添加到队列中。
因此,这两个进程都无法完成并释放资源,因为它们都在等待其他进程完成。由于来自P1
的请求想要的超出了可能的范围,所以它永远不会完成,其他请求也是如此。因此,出现了僵局。