3

我在一本关于操作系统的书中找到了以下代码。这是一种称为“严格更改”的技术,旨在通过在进程进入关键区域时使用锁来防止进程之间的竞争条件。我了解比赛条件,但我不太了解这段代码。

// process 0
while(TRUE) {
   while(turn != 0)   /* loop */
   critical_region();
   turn = 1;
   noncritical_region();
}

旁边还有这段代码。

// process 1
while(TRUE) {
   while(turn != 1)   /* loop */
   critical_region();
   turn = 0;
   noncritical_region();
}

我认为第二个 while 循环的代码中可能存在拼写错误。如果没有,那么有人可以解释这段代码是如何工作的吗?书中的解释对我来说没有意义。它只在非常笼统、抽象的层面上才有意义。但是,当我查看此代码时,我就是不明白。

4

1 回答 1

1

嗯,turn变量包含了允许进入临界区的进程号。希望它在这里做一些有用的工作,然后它通过更改转变量显式允许其他进程进入临界区。结果,每个过程都轮流重复工作。

当其中一个进程终止时,这会突然停止。实时进程将给它轮到,但由于它不再运行,所以永远不会返回。实时进程不会做任何有用的工作。

于 2011-02-25T01:12:03.710 回答