我知道 Peterson Algo 的默认实现。给我 - 互斥、进步和有限的等待。
正常的彼得森算法如下。
bool flag[0] = false;
bool flag[1] = false;
int turn;
P0: flag[0] = true;
turn = 1;
while (flag[1] && turn == 1)
{
// busy wait
}
// critical section
...
// end of critical section
flag[0] = false;
P1: flag[1] = true;
turn = 0;
while (flag[0] && turn == 0)
{
// busy wait
}
// critical section
...
// end of critical section
flag[1] = false;
我希望对这个版本进行一些修改。
1) 进程 P0 中的语句 flag[0] = TRUE 和 flag[0] = FALSE 互换,在进程 P1 中进行类似的更改。这个算法会为我提供 - 互斥、进步和有限等待。- 我觉得这个算法不支持互斥。任何人都可以为我提供更多信息吗?
2) Peterson 解中的语句 while (flag[1] && turn = 1) 改为 while (flag[1] or turn = [1] ) 并在进程 P1 中进行类似的更改。结果系统违反了临界区的哪些属性,为什么?- 这仍然会有互斥,但我怀疑 Progress 和 Bounded waiting。任何人都可以为我提供更多信息吗?
谢谢你的时间。