我一直在寻找有关Peterson's algorithm的信息,但曾经遇到过有关它不满足饥饿但只有僵局的参考文献。这是真的?如果有的话可以有人详细说明为什么它不?彼得森的算法是否满足饥饿?
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;
该算法使用两个变量,标志和转动。标志值为1表示进程想要进入临界区。变量turn保存了轮到它的进程的ID。如果P1不想进入其临界区,或者如果P1通过将其设置为0而赋予P0优先级,则进入临界区的进入P0。
如果您提出问题,请为那些不熟悉您所谈论主题的人提供更多背景。它是什么样的算法?它能做什么?你确切的问题是什么?如果你这样做,社区将非常感激。 – 2010-10-27 13:29:12