好的,我正在阅读加尔文第六版的关键部分问题。事实上,问题中使用的算法有一个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循环是什么意思!? :|
答案 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
}
在您的情况下,正如您提到您的程序是多线程的,turn
或i
似乎需要在执行关键部分之前有所不同。 while语句允许循环测试这个条件,直到一个线程修改其中一个来满足它。
答案 1 :(得分:1)
如果while循环中的条件为false,则进程P0的临界区将执行,如果条件为真,则while循环迭代(将其视为进程P0进入休眠状态),直到turn的值发生变化为止通过正在运行其关键部分的其他流程。