【发布时间】:2020-03-06 15:52:27
【问题描述】:
我了解线程的虚假唤醒可能发生在 pthread 中。以下讨论很有趣且内容丰富:Why does pthread_cond_wait have spurious wakeups?。我的问题可能很明显,但我想确保我理解正确。当@acm 声明“......你已经总是需要检查循环下的谓词”时,这意味着我们应该使用 while 循环而不是 for 语句来测试条件,因为前者会重新- 测试条件是否为真,而后者将允许看似虚假唤醒的线程继续执行,即使在达到 CPU 时条件可能不再成立?
【问题讨论】:
-
我不明白你在 while 循环和 for 循环之间有什么区别。它们只是 if 和 goto 的不同语法糖。
-
@Employed Russian 答案中突出显示的部分是我所做的区分。这样的条件应始终在 while 循环而不是 for 循环下检查,尽管您可以将 for 循环编写为基本上是 while 循环。回顾这个问题,这很明显,但由于它已经解决了,所以我将其搁置。
标签: c pthreads condition-variable