Operating system 临界截面

Operating system 临界截面,operating-system,Operating System,下面的解决方案如何不满足临界截面问题的解决标准 三种情况中哪一种不令人满意? 1.互斥 2.进展 3.有界等待 我知道这是一种令人满意的互斥,但是2和3呢? 请注意,这不是家庭作业。我想了很多,但仍然不清楚 [编辑] 删除图片并添加代码 Pi’s Algorithm Var flag : array [ i…j] of boolean repeat flag [i] = true; While ( flag [j] == “ true ”)

下面的解决方案如何不满足临界截面问题的解决标准

三种情况中哪一种不令人满意?
1.互斥
2.进展
3.有界等待

我知道这是一种令人满意的互斥,但是2和3呢?
请注意,这不是家庭作业。我想了很多,但仍然不清楚

[编辑]
删除图片并添加代码

Pi’s Algorithm    
    Var flag : array [ i…j] of boolean    
    repeat  
    flag [i] = true;    
While ( flag [j]  == “ true ”) do no-op;        


            Critical section


Flag [i]=“ false ”;
 until false
另一个过程

Pj’s Algorithm    
    Var flag : array [ i…j] of boolean
repeat  
  flag [ j ] = true;
While ( flag [ i ]  == “ true ”) do no-op;  


        Critical section


Flag [j]=“ false ”;
 until false

系统可能处于死锁状态:

2个进程:P1、P2。我假设I和j是进程的id,是共享变量,flags数组也是

然后P1开始执行:

flag[1] := true;
->此处P1被调度程序中断,P2开始运行:

flag[2] := true;
while (flag[1] == true) do nop ;
->P2仍然在这个循环中。稍后,计划程序将再次拾取P1:

while (flag[2] == true) do nop;

->P1也卡在回路中。没有进展。这种死锁因此违反了#2和#3。此外,还可能有一个进程被饿死(另一个进程总是在整个代码中运行,并且从不在标志[i]:=false和标志[i]之间中断):=正确,因此第一个进程永远不会有机会离开while循环。

这是一个采访中的问题,他们在采访中问到,如果只使用一个变量,为什么peterson问题会失败?因此,我只为一个变量标记编写了代码,并留下了另一个[turn].现在,我无法弄清楚这是如何失败的?我同意你的看法。但是,你不认为彼得森的解决方案中也会出现这种情况,但事实证明它提供了关键部分问题的解决方案。请查看此链接: