线程是否应该始终使用while循环来保存pthread\u cond\u wait语句?

线程是否应该始终使用while循环来保存pthread\u cond\u wait语句?,c,pthreads,condition-variable,C,Pthreads,Condition Variable,我知道pthread中可能会出现线程的虚假唤醒。以下讨论很有趣,内容丰富:。我的问题可能很明显,但我想确保我理解正确。当@acm声明“…您已经总是需要检查循环下的谓词”时,意思是我们应该使用while循环来测试条件,而不是for语句,因为前者将重新测试条件是否为真,然而,后者允许看似被错误唤醒的线程继续执行,即使当它到达CPU时,条件可能不再有效 当@acm声明“…您已经总是需要检查循环下的谓词”时,意思是我们应该使用while循环来测试条件,而不是for语句 正如R已经说过的,以下两者之间没有

我知道pthread中可能会出现线程的虚假唤醒。以下讨论很有趣,内容丰富:。我的问题可能很明显,但我想确保我理解正确。当@acm声明“…您已经总是需要检查循环下的谓词”时,意思是我们应该使用while循环来测试条件,而不是for语句,因为前者将重新测试条件是否为真,然而,后者允许看似被错误唤醒的线程继续执行,即使当它到达CPU时,条件可能不再有效

当@acm声明“…您已经总是需要检查循环下的谓词”时,意思是我们应该使用while循环来测试条件,而不是for语句

正如R已经说过的,以下两者之间没有区别:

while (!predicate()) {
  pthread_condition_wait(...);
}


无论使用哪种循环,您都可以编写正确的代码或错误的代码。

我不明白while循环和for循环之间的区别。对于ifs和gotos来说,它们只是不同的语法糖。@Employed Russian的答案中突出显示的部分就是我所做的区分。这样的条件应该总是在while循环下检查,而不是在for循环下检查,尽管您可以将for循环编写为while循环。回顾这个问题,它是相当明显的,但我会留下来,因为它已经解决了。
for (...; !predicate(); ...) {
  pthread_condition_wait(...);
}