我在看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;
答案 0 :(得分:3)
P0进入临界区的条件取决于P1的标志为真。
不,不。声明......
while (flag[1] == true && turn == 1) { ... }
正忙着等待P1的标志停止为真。即:P0等待P1离开其临界区。由于P1尚未进入临界区,因此P0不会忙等待并正确进入临界区。