【发布时间】:2009-01-04 19:06:47
【问题描述】:
请看下面的伪代码:
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
}
我认为可以使用上面的代码实现一个简单的互斥解决方案。但它不起作用。有人知道为什么吗?
任何帮助将不胜感激!
【问题讨论】:
-
请发布真实代码而不是伪代码,并指定语言。多线程容易出现非常细微的错误 - 查看准确代码至关重要。
-
我之前犯过这个错误(发布psudo),在贴出真实代码的过程中发现了问题。所以拜托,真正的代码。
-
另外,你怎么知道它不起作用?
-
不工作是指...?
-
该程序是用 C 语言编写的,我无法发布源代码,因为它真的很长。问题是,在某些时候,两个过程都访问了关键部分......
标签: mutex