首页 > 解决方案 > 线程是否应该始终使用 while 循环来保存 pthread_cond_wait 语句?

问题描述

我知道线程的虚假唤醒可能发生在 pthread 中。以下讨论很有趣且内容丰富:为什么 pthread_cond_wait 有虚假唤醒?. 我的问题可能很明显,但我想确保我理解正确。当@acm 声明“......你已经总是​​需要检查循环下的谓词”时,这意味着我们应该使用 while 循环而不是 for 语句来测试条件,因为前者会重新- 测试条件是否为真,而后者将允许看似虚假唤醒的线程继续执行,即使条件在达到 CPU 时可能不再成立?

标签: cpthreadscondition-variable

解决方案


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

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

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

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

您可以使用任何一种循环编写正确的代码或错误的代码。


推荐阅读