c - pthread_cond_wait 无限期地阻塞(睡眠),直到 pthread_cond_signal 被 C 中的另一个线程调用?
问题描述
如果一个线程: A 在 pthread_cond_wait 中被阻塞以等待某个条件,我们的线程 A 是否会无限期地休眠等待 pthread_cond_signal 在另一个线程中被调用?或者,即使条件以某种方式变为真(工作负载> MAXLOAD),它也会被唤醒,而没有使用 pthread_cond_wait 发出信号。
线程 A:
while(1) {
pthread_mutex_lock( &recoveryMutex );
while( workload < MAXLOAD ) {
pthread_cond_wait(&recoveryCond, &recoveryMutex );
}
/* Recovery Code */
/* Recovery Code */
/* Recovery Code */
pthread_mutex_unlock(&recoveryMutex);
}
解决方案
简而言之,是的,它会无限期地阻塞/休眠,直到您发出信号为止。
pthread_cond_wait
可能出于任何原因“虚假地”醒来(这通常与条件变为真的没有任何关系;从机械上讲,这种关系不可能成为合理的方式),但在pthread_cond_signal
或被pthread_cond_broadcast
调用之前没有合约要醒来。每当您对可能导致谓词的真值发生变化的状态进行了一些更改时,您都需要调用这些函数之一。
推荐阅读
- assembly - x86 程序集的语法检查
- java - 如何允许站点获取访问其 URL 的机器的 IP
- javascript - 包括 Protobuf 返回“exports”是只读的
- javascript - jQuery数据表不刷新
- html - 使用 Angular 6 重定向到另一个页面
- kubernetes - 如何连接 Gitlab 和本地 Kubernetes 集群
- c - 为什么将 int(0) 分配给字符串索引会结束循环?
- vba - 如何将特定工作表更改为当前工作表?
- python-3.x - 使用 keras fit_generator 输出 sample_weights
- python-3.x - 没有名为“selenium.webdriver.chrome”的模块