C++ 在结构中使用pthread条件等待
我之前询问过在不使用pthread_join的情况下同步两个线程的问题,我能够使用pthread_cond_wait和pthread_cond_signal解决这个问题。 我编写了一个小型结构,将此功能捆绑到一个地方:C++ 在结构中使用pthread条件等待,c++,pthreads,C++,Pthreads,我之前询问过在不使用pthread_join的情况下同步两个线程的问题,我能够使用pthread_cond_wait和pthread_cond_signal解决这个问题。 我编写了一个小型结构,将此功能捆绑到一个地方: struct ConditionWait { int i_ConditionPredicate; pthread_mutex_t lock_Var; pthread_cond_t cond_Var;
struct ConditionWait
{
int i_ConditionPredicate;
pthread_mutex_t lock_Var;
pthread_cond_t cond_Var;
int i_ValidResult;
ConditionWait()
{
pthread_mutex_init(&lock_Var, NULL);
pthread_cond_init(&cond_Var, NULL);
i_ValidResult = 1;
i_ConditionPredicate = 0;
}
void Signal()
{
pthread_mutex_lock(&lock_Var);
i_ConditionPredicate = i_ValidResult;
pthread_cond_signal(&cond_Var);
pthread_mutex_unlock(&lock_Var);
}
void Wait()
{
pthread_mutex_lock(&lock_Var);
while(i_ConditionPredicate != i_ValidResult)
{
pthread_cond_wait(&cond_Var, &lock_Var);
}
pthread_mutex_unlock(&lock_Var);
}
};
假设我从两个不同的线程调用Wait和Signal,这是线程安全的吗。在同一对象的两个函数中使用相同的锁是否会导致死锁或竞争条件
编辑:我现在在我的程序中使用它,它工作得很好。我不太确定这是否只是运气这只会工作一次,在唤醒等待的线程后,下一次尝试等待都会成功,并且不会阻塞,因为您从未重置条件谓词。如果这是您想要的,或者在您的情况下不重要,那么是的,这是安全的,并且是通常使用条件变量的方式 PS:您还应该在这个东西的析构函数中使用pthread_mutex_destroy和pthread_cond_destroy