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

时间:2016-03-07 14:47:13

标签: c++ multithreading pthreads conditional-statements

我使用条件来编写简单的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);
}

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

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);
}