通过严格改变来防止竞争条件

时间:2011-02-24 23:54:22

标签: c locking while-loop race-condition critical-section

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

// 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循环可能会出现拼写错误。如果没有,那么有人可以解释这段代码是如何工作的吗?书中的解释对我来说没有意义。它只在非常笼统的抽象层面才有意义。但是,当我看到这段代码时,我就是不明白。

1 个答案:

答案 0 :(得分:1)

嗯,变量包含允许进入临界区的进程号。希望它在这里做一些有用的工作,然后它明确允许其他进程通过更改转弯变量进入临界区。因此,每个流程都会反复进行工作。

当其中一个进程终止时,这会暂停。它会在实时过程中转向,但永远不会回转,因为它不再运行。实时流程不会做任何有用的工作。