Operating system 两个并行进程如何执行此互斥代码?

Operating system 两个并行进程如何执行此互斥代码?,operating-system,mutual-exclusion,Operating System,Mutual Exclusion,这是我的一个练习中的互斥问题解决方案: var blocked : array[0..1] of boolean; (* blocked is an array of two Boolean elements *) turn : 0..1; (* turn can have value 0 or 1 *) procedure P ( id : integer ) begin repeat blocked[id] := true; whi

这是我的一个练习中的互斥问题解决方案:

    var blocked : array[0..1] of boolean;  (* blocked is an array of two Boolean elements *)
    turn : 0..1;    (* turn can have value 0 or 1 *)
procedure P ( id : integer )
  begin
    repeat
      blocked[id] := true;
      while turn ≠ id do
      begin
        while blocked[1 – id] do;  (* a do-nothing loop to implement busy waiting *)
        turn := id
      end;
      < critical section >
      blocked[id] := false;
      < remainder of procedure >
    until false
  end;
begin (* main program *)
  blocked[0] := false;  blocked[1] := false;
  turn := 0;
  parbegin  (* begin parallel execution of processes *)
    P(0); P(1)  (* invoke two concurrent processes, both to execute procedure P *)
  Parend    (* end parallel execution *)
end.
var阻塞:布尔值的数组[0..1];(*blocked是两个布尔元素的数组*)
转弯:0..1;(*回合可以有值0或1*)
过程P(id:integer)
开始
重复
阻塞的[id]:=true;
轮到≠ 我愿意
开始
当被阻止时[1–id]do;(*一个不做任何事情的循环来实现繁忙等待*)
回合:=id
结束;

阻塞的[id]:=false;
<程序的剩余部分>
直到错误
结束;
开始(*主程序*)
阻塞的[0]:=false;阻塞的[1]:=false;
匝数:=0;
parbegin(*开始并行执行进程*)
P(0);P(1)(*调用两个并发进程,两者都执行过程P*)
Parend(*结束并行执行*)
结束。
我无法理解进程何时执行上述代码中的特定语句。我知道我们可以有多种执行方案

我想知道执行顺序的不确定性是否一直存在

还有,有没有办法弄清楚会发生什么样的执行场景


谢谢

我觉得这不正确。@user3344003是的。我们应该找到一个这样的场景:代码将失败。我只是想知道执行部分是如何工作的。如果它总是随机的,还是我们可以控制?我在上面问的事情是不可预测的。