【发布时间】:2010-10-27 13:26:25
【问题描述】:
我一直在搜索有关 Peterson's algorithm 的信息,但遇到了一些参考资料,指出它不能满足饥饿,而只能满足死锁。这是真的?如果是这样,有人可以详细说明为什么不这样做吗?
彼得森算法:
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 通过将 turn 设置为 0 优先于 P0,则允许进程 P0 进入临界区。
【问题讨论】:
-
如果您提出问题,请为不熟悉您所谈论的主题的人提供更多背景信息。它是什么样的算法?它能做什么?你的确切问题是什么?如果您这样做,社区将非常感激。
标签: algorithm deadlock solution