首页 > 解决方案 > 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);
}

标签: cpthreadssignalssystems-programming

解决方案


简而言之,的,它会无限期地阻塞/休眠,直到您发出信号为止。

pthread_cond_wait 可能出于任何原因“虚假地”醒来(这通常与条件变为真的没有任何关系;从机械上讲,这种关系不可能成为合理的方式),但在pthread_cond_signal或被pthread_cond_broadcast调用之前没有合约要醒来。每当您对可能导致谓词的真值发生变化的状态进行了一些更改时,您都需要调用这些函数之一。


推荐阅读