以下解决方案如何不满足关键部分问题的解决方案标准?
三种情况中哪一种不满意?
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
答案 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循环。