c - 线程是否应该始终使用 while 循环来保存 pthread_cond_wait 语句?
问题描述
我知道线程的虚假唤醒可能发生在 pthread 中。以下讨论很有趣且内容丰富:为什么 pthread_cond_wait 有虚假唤醒?. 我的问题可能很明显,但我想确保我理解正确。当@acm 声明“......你已经总是需要检查循环下的谓词”时,这意味着我们应该使用 while 循环而不是 for 语句来测试条件,因为前者会重新- 测试条件是否为真,而后者将允许看似虚假唤醒的线程继续执行,即使条件在达到 CPU 时可能不再成立?
解决方案
当@acm 声明“......你已经总是需要检查循环下的谓词”时,这意味着我们应该使用 while 循环而不是 for 语句来测试条件,
正如 R 已经说过的,两者之间没有区别:
while (!predicate()) {
pthread_condition_wait(...);
}
和
for (...; !predicate(); ...) {
pthread_condition_wait(...);
}
您可以使用任何一种循环编写正确的代码或错误的代码。
推荐阅读
- cassandra - Cassandra 二级索引备份和恢复
- python - 在自定义对象检测中使用 tensorflow-gpu 的错误
- java - 自定义gradle插件+从方法访问返回值?
- caching - 如何使用 AMP 缓存在 amp 页面上制作呼叫按钮
- javascript - 捕获 Javascript 类方法中的所有异常
- python - 在 cloud9 中上传带有熊猫的 csv
- android - 如何在 Android Studio 中覆盖/更新 Jama Matrix 而不会出现任何错误?
- windows - visual studio 2019 显示没有错误,但是驱动没有编译
- r - 根据条件和组创建变量
- c# - 运行应用程序时在 VSCode 中的 ASP.NET Core 应用程序中启动特定 URL