wiki:https://zh.wikipedia.org/zh-cn/Peterson%E7%AE%97%E6%B3%95
最近做题,遇到这个
//flag[] is boolean array; and turn is an integer
flag[0] = false;
flag[1] = false;
int 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;
如上代码, P1 执行完了的时候 turn=0,P0 可能在 while 处死循环,肯定无法设置 turn=1,所以不就饥饿了么?
求解答
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.