我在一本关于操作系统的书中找到了以下代码。这是一种称为“严格更改”的技术,应该通过在进程进入关键区域时使用锁来防止进程之间的竞争条件。我理解竞争条件,但我不太了解这段代码。
// 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循环可能会出现拼写错误。如果没有,那么有人可以解释这段代码是如何工作的吗?书中的解释对我来说没有意义。它只在非常笼统的抽象层面才有意义。但是,当我看到这段代码时,我就是不明白。
答案 0 :(得分:1)
嗯,转变量包含允许进入临界区的进程号。希望它在这里做一些有用的工作,然后它明确允许其他进程通过更改转弯变量进入临界区。因此,每个流程都会反复进行工作。
当其中一个进程终止时,这会暂停。它会在实时过程中转向,但永远不会回转,因为它不再运行。实时流程不会做任何有用的工作。