C编程语言中的严格交替(来自Tanenbaum)
为什么进程0的第一个入口的测试没有严格交替进行(turn==0)//然后进入 进程0如何进入while(turn!=0),这与while(turn==1)是否相同C编程语言中的严格交替(来自Tanenbaum),c,testing,synchronization,C,Testing,Synchronization,为什么进程0的第一个入口的测试没有严格交替进行(turn==0)//然后进入 进程0如何进入while(turn!=0),这与while(turn==1)是否相同 如果用括号展开您发布的代码,它如下所示: turn = 0; //process 0 to enter while (TRUE) { while (turn != 0) { critical_region(); } turn = 1; noncritical_region(); } 因此,
如果用括号展开您发布的代码,它如下所示:
turn = 0;
//process 0 to enter
while (TRUE)
{
while (turn != 0)
{
critical_region();
}
turn = 1;
noncritical_region();
}
因此,第一次进入主循环时,它将
turn
设置为1,并调用noncritical\u region
。第二次调用critical\u region
时,它可能会停留在那里。如果您用括号展开发布的代码,它看起来如下所示:
turn = 0;
//process 0 to enter
while (TRUE)
{
while (turn != 0)
{
critical_region();
}
turn = 1;
noncritical_region();
}
因此,第一次进入主循环时,它将
turn
设置为1,并调用noncritical\u region
。第二次调用critical\u region
时,它可能会停留在那里。我怀疑正确的代码是:
turn = 0;
//process 0 to enter
while (TRUE) {
while (turn != 0) critical_region();
turn = 1;
noncritical_region();
}
//process 1 to enter
while (TRUE) {
while (turn != 1) critical_region();
turn = 0;
noncritical_region();
}
我怀疑正确的代码是:
turn = 0;
//process 0 to enter
while (TRUE) {
while (turn != 0) critical_region();
turn = 1;
noncritical_region();
}
//process 1 to enter
while (TRUE) {
while (turn != 1) critical_region();
turn = 0;
noncritical_region();
}
首先,你的代码错了。Tanenbaum的严格替换如下所示(他的示例没有块,但我认为这样更容易理解): 严格交替的思想有两个方面:
首先,你的代码错了。Tanenbaum的严格替换如下所示(他的示例没有块,但我认为这样更容易理解): 严格交替的思想有两个方面:
我认为代码实际上是这样的
while (TRUE)
{
while (turn != 0) **;**
critical_region;
turn=1;
noncritical_region;
}
请注意,在书中,分号在注释/*loop*/之后,写在内部while之后。我认为代码实际上是这样的
while (TRUE)
{
while (turn != 0) **;**
critical_region;
turn=1;
noncritical_region;
}
请注意,在本书中,分号位于注释/*loop*/之后,注释写在内部while之后