循环时临界区概率

时间:2012-10-13 08:49:09

标签: c operating-system while-loop critical-section

好的,我正在阅读加尔文第六版的关键部分问题。事实上,问题中使用的算法有一个while循环:

do
  {
   while(turn!=i);
   critical section
   turn=j;
    remainder section
}while(1);

最初转= = 0,对于i = 0,进程p0运行其严重问题。对于此特定情况,while(turn!=i);评估为while(false)

现在我的问题是,如果while循环计算为false,那么如何评估以下关键部分。这里有愚蠢的部分,如果由于任何原因 while(转!= i); 有分号,那么以下语句对while循环没有影响!那么,在这里使用while循环是什么意思!? :|

2 个答案:

答案 0 :(得分:2)

在这种情况下,while循环将无限循环,或者什么都不做。带有半colomn的while循环指定它应该尝试循环,但是没有在while块中执行指令。写while (1);等同于while (1) {}

这种语法的一个常见用法是当你想要迭代时,比如说,直到字符串的结尾,进一步的工作。你会写类似

的东西
char *work_on_end_of_string(char *str) {
  int i = 0;

  while (str[i++]); 
  // now str[i] is pointing on the end of the string
}

在您的情况下,正如您提到您的程序是多线程的,turni似乎需要在执行关键部分之前有所不同。 while语句允许循环测试这个条件,直到一个线程修改其中一个来满足它。

答案 1 :(得分:1)

如果while循环中的条件为false,则进程P0的临界区将执行,如果条件为真,则while循环迭代(将其视为进程P0进入休眠状态),直到turn的值发生变化为止通过正在运行其关键部分的其他流程。