2
我以前曾詢問過如何在不使用pthread_join的情況下同步兩個線程,並且我能夠使用pthread_cond_wait和pthread_cond_signal來解析它。 我寫了一個小結構捆綁這個功能集成到一個單一的地方:在結構中使用pthread條件等待
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()和信號(),這會是線程安全的。在相同對象的兩個函數中使用相同的鎖會導致死鎖還是競爭條件?
編輯:我現在在我的程序中使用它,它工作正常。我不太確定它是否只是運氣