如何在等待前检测 pthread 条件信号?

How to detect pthread condition singal before wait?

我编写了使用条件同步两个线程的简单 pthread 示例。在某些情况下,在等待之前调用信号并永远等待线程锁定。

有没有办法在等待前检测信号?

void *Thread1(void *args){
    sleep(1);
    pthread_mutex_lock(&mutex);
    pthread_cond_wait(&cond,&mutex);
    pthread_mutex_unlock(&mutex);
}

void *Thread2(void *args){
    pthread_mutex_lock(&mutex);
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&mutex);
}

停止使用条件变量作为信号机制,因为它们不是。您总是需要一个保存数据的实际变量。当您需要使用数据时,首先要检查它的状态,如果状态不是您想要的状态,则等待条件发生。一旦你被唤醒,你再次检查状态。

您不能将条件变量用作信号。

条件变量必须始终与某个共享状态的条件配对(称为 谓词)。一个简单的例子是共享标志变量:

int should_wait = 1;

void *Thread1(void *args)
{
    pthread_mutex_lock(&mutex);
    while (should_wait)
        pthread_cond_wait(&cond, &mutex);
    pthread_mutex_unlock(&mutex);
}

void *Thread2(void *args){
    pthread_mutex_lock(&mutex);
    should_wait = 0;
    pthread_cond_signal(&cond);
    pthread_mutex_unlock(&mutex);
}