互斥(彼得森算法)



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

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

不,它没有。声明…

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

忙——等待P1 stop的标志为真。即:P0等待P1离开它的临界区域。由于P1还没有进入临界区,所以P0不忙等待,正确进入临界区

相关内容

  • 没有找到相关文章

最新更新