我一直在搜索Peterson算法的信息,但是遇到了一些引用说它不能解决饥饿问题,只能解决死锁问题。这是真的吗?如果是,有人可以详细说明为什么吗?
Peterson算法:
flag[0] = 0;
flag[1] = 0;
turn;
P0: flag[0] = 1;
turn = 1;
while (flag[1] == 1 && turn == 1)
{
// busy wait
}
// critical section
...
// end of critical section
flag[0] = 0;
P1: flag[1] = 1;
turn = 0;
while (flag[0] == 1 && turn == 0)
{
// busy wait
}
// critical section
...
// end of critical section
flag[1] = 0;
算法使用两个变量,flag和turn。flag值为1表示进程想要进入临界区。变量turn保存了该轮到哪个进程执行的进程ID。如果P1不想进入其临界区或者P1通过将turn设置为0来优先考虑P0,则允许P0进入临界区。