如何在等待前检测 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);
}
我编写了使用条件同步两个线程的简单 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);
}