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

时间:2016-02-10 04:30:25

标签: 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;
      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.

我无法理解一个进程何时在上面的代码中执行特定语句。我知道我们可以有多个执行方案。

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

并且,有没有办法弄清楚会发生什么样的执行情况?

谢谢!

0 个答案:

没有答案