我正在看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不忙等待,正确进入临界区