1

我在看 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;
4

1 回答 1

3

P0 进入其临界区的条件取决于我们的标志 P1 是否为真。

不,它没有。该声明...

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

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

于 2013-03-03T16:48:01.260 回答