gpt4 book ai didi

mutex - 互斥问题

转载 作者:行者123 更新时间:2023-12-01 01:38:15 27 4
gpt4 key购买 nike

请看下面的伪代码:

boolean blocked[2];
int turn;
void P(int id) {
while(true) {
blocked[id] = true;
while(turn != id) {
while(blocked[1-id])
/* do nothing */;
turn = id;
}
/* critical section */
blocked[id] = false;
/* remainder */
}
}
void main() {
blocked[0] = false;
blocked[1] = false;
turn = 0;
parbegin(P(0), P(1)); //RUN P0 and P1 parallel
}

我认为 a 可以使用上面的代码实现一个简单的互斥解决方案。但它不起作用。有没有人知道为什么?

任何帮助将不胜感激!

最佳答案

由于以下原因,本示例不保证互斥:

我们从以下情况开始:

blocked = {false, false};
turn = 0;

P1 现在执行,并跳过
  blocked[id] = false; // Not yet executed.

现在的情况是:
blocked {false, true}
turn = 0;

现在 P0 执行。它通过第二个 while 循环,准备执行临界区。当 P1 执行时,它设置 turn 为 1,并且也准备执行临界区。

顺便说一句,这种方法最初是由海曼发明的。他于 1966 年将其发送给 Acm 通讯

关于mutex - 互斥问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/411499/

27 4 0