c - 通过严格修改来防止比赛条件

标签 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循环可能在此代码中出现错别字。如果没有,那么有人可以解释此代码的工作原理吗?这本书中的解释对我来说没有意义。仅在非常一般的抽象级别上才有意义。但是,当我看这段代码时,我只是不明白。

最佳答案

好了,turn变量包含允许进入关键部分的进程号。希望它可以在此处做一些有用的工作,然后通过更改turn变量显式允许其他进程进入关键部分。结果,每个过程轮流重复进行工作。

当其中一个过程终止时,这将导致暂停。实时过程会将其转弯,但不会转弯,因为它不再运行。实时过程不会做任何有用的工作。

关于c - 通过严格修改来防止比赛条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112047/

相关文章:

C编程: write() integers to a text file

c - 打印前执行的扫描语句

c - 复杂表达式的运算符优先级和求值顺序

java - 同步与读写锁

python - 运行 Python 程序直到特定时间

c - 右移运算符无限循环

java - 双重检查锁定文章

swift - block 没有真正执行?

java - 这样做有效吗? (c、c++、java)

java - 我无法关闭扫描仪