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