如果一个线程: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
被调用之前没有唤醒契约(Contract)。每当您对状态进行一些更改可能导致谓词的真值发生更改时,您都需要调用这些函数之一。
关于c - pthread_cond_wait 无限期地阻塞(休眠)直到 pthread_cond_signal 被 C 中的另一个线程调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57150766/