我在有关操作系统的书中找到了以下代码。这是一种称为“严格变更”的技术,该技术应在进程进入关键区域时通过使用锁定来防止进程之间的竞争状况。我了解比赛条件,但是我不太了解这段代码。
// 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循环可能在此代码中出现错别字。如果没有,那么有人可以解释此代码的工作原理吗?这本书中的解释对我来说没有意义。仅在非常一般的抽象级别上才有意义。但是,当我看这段代码时,我只是不明白。
最佳答案
好了,turn变量包含允许进入关键部分的进程号。希望它可以在此处做一些有用的工作,然后通过更改turn变量显式允许其他进程进入关键部分。结果,每个过程轮流重复进行工作。
当其中一个过程终止时,这将导致暂停。实时过程会将其转弯,但不会转弯,因为它不再运行。实时过程不会做任何有用的工作。
关于c - 通过严格修改来防止比赛条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112047/