难以理解Petersons算法

时间:2016-05-25 05:26:14

标签: algorithm operating-system mutex

我对彼得森的算法有点困难: 算法说:

flag[i] = true;
turn = j;
while (flag[j] && turn == j);
// critical section
...
// end of critical section
flag[i] = false;

现在让我们假设一下 标志[0] =标志[1] =真

如果P1开始执行,它将忙于等待while循环,因为flag [0]和turn == 0都将为真。现在,如果P0不想执行,P1将永远不会执行临界区。

请明白我的疑问;我的理解可能存在差距。

由于

1 个答案:

答案 0 :(得分:1)

  

现在假设最初标志[0] =标志[1] =真

     

现在如果P0不想执行,P1将永远不会执行临界区。

两个标志都应初始化为false。两者都可以设置为true的唯一方法是,如果两个进程都想要执行或正在执行临界区。因此,如果P1正在等待执行,flag[0]true,那么P0必须要么执行临界区,要么在执行它之前,之后将设置flag[0]false,P1可以进入临界区。此外,如果P1正在等待执行,则P0也不能等待执行,因为等待条件是互斥的(因为turn是0或1并且不能同时执行)。

初始化true的两个标志可能会导致您描述的死锁。这样做是没有意义的,因为标志的含义是指示进程想要进入临界区,所以如果不是这样,为什么要设置该值?