C 编程语言中的严格交替(来自 Tanenbaum)

Chr*_*_45 0 c testing synchronization

为什么进程0的第一个入口不严格交替测试 while (turn == 0) //then Enter 进程0怎么能进入 while (turn != 0),这和 while (turn != 0) 不一样吗== 1) ?

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();
}
Run Code Online (Sandbox Code Playgroud)

R S*_*hko 5

首先,你的代码是错误的。Tanenbaum 的严格交替看起来像这样(他的示例是没有块的,但我认为遵循这种方式更容易):

while (TRUE) {
    while (turn != 0)
    {
        /* do nothing */
    }
    critical_region();
    turn = 1;
    noncritical_region();
}
Run Code Online (Sandbox Code Playgroud)

严格交替的想法有两个方面:

  1. 在任何给定的时刻,只有一个进程可以执行函数 critical_region()
  2. 两个进程轮流运行ritical_region()(即,一旦进程0运行了ritical_region(),它必须等待进程1运行ritical_region(),然后才能再次运行)。