我正在阅读Silberschatz G. Gagne的操作系统概念,关于死锁的章节,有一个针对死锁检测的伪代码如下:
让工作和结束分别是长度为m和n的向量。 (有n个进程和m个资源。)
初始化工作=可用。对于i = 0,1,...,n-1,如果分配[i] != 0,然后Finish [i] = false; 否则,Finish [i] = true。
查找索引i,使得Finish [i] == false&&请求[i]< =工作。
如果不存在,请转到步骤4.
工作=工作+分配[i]
完成[i] = true;
转到第2步。
- 醇>
如果某些i的Finish [i] == false,则系统会死锁。此外,如果Finish [i] == false,则处理Pi死锁。
这与银行家的算法非常相似。但是,上面的粗体声明略有不同。
如果操作系统没有为该进程安排任何资源,有人可以解释为什么算法会立即将Finish [i]设置为对于进程i为真。据我所知,这绝对不意味着它不会陷入僵局,因为第4步提到(不确定这是否正确)。谢谢!
答案 0 :(得分:1)
运行此算法时,它会检测当前涉及死锁的进程(如果有)。
一个持有没有资源的进程可能正在等待死锁进程,但是它本身不能参与死锁,并且与算法的其余部分无关(它在步骤3中没有效果) ),因此通过设置Finish[i]=true
请注意,此算法仍无法正确识别死锁进程。在步骤4中标记的进程可能保留资源,并且可能被阻塞等待死锁进程,但可能没有死锁进程需要它拥有的资源,因此进程本身不会涉及死锁。