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