相互排斥(彼得森算法)

时间:2013-03-03 16:42:02

标签: concurrency process operating-system concurrent-programming mutual-exclusion

我在看Peterson的算法(2个进程的互斥)我的问题是如果没有进程进入临界区并且P0想要第一次进入临界区,那么P1的标志将是假的,所以P0如何进入它的关键部分? P0进入临界区的条件取决于P1的标志为真。

代码:

    //flag[] is boolean array; and turn is an integer
flag[0]   = false;
flag[1]   = false;
turn;

P0: flag[0] = true;
    turn = 1;
    while (flag[1] == true && turn == 1)
    {
        // busy wait
    }
    // critical section
    ...
    // end of critical section
    flag[0] = false;

P1: flag[1] = true;
    turn = 0;
    while (flag[0] == true && turn == 0)
    {
        // busy wait
    }
    // critical section
    ...
    // end of critical section
    flag[1] = false;

1 个答案:

答案 0 :(得分:3)

  

P0进入临界区的条件取决于P1的标志为真。

不,不。声明......

while (flag[1] == true && turn == 1) { ... }

正忙着等待P1的标志停止为真。即:P0等待P1离开其临界区。由于P1尚未进入临界区,因此P0不会忙等待并正确进入临界区。