关键部分

时间:2012-06-17 11:53:03

标签: 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 ”) 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

1 个答案:

答案 0 :(得分:0)

系统可能会陷入僵局:

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。此外,其中一个进程也可能被饿死(另一个进程总是贯穿整个代码,并且永远不会在flag [i]:= false和flag [i]:= true之间中断,因此第一个进程永远不会得到有机会离开while循环。