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);
}
};
내가이 스레드 안전 할 것, 두 개의 서로 다른 스레드에서 대기() 및 신호()를 호출한다고 가정. 동일한 객체의 두 함수에서 동일한 잠금을 사용하면 교착 상태 또는 경쟁 조건이 발생합니까?
편집 : 지금 내 프로그램에서 이것을 사용하고 있으며 정상적으로 작동합니다. 나는 그것이 단지 운이 좋은지 아닌지 잘 모르겠다.