2
pthread_joinを使用せずに2つのスレッドの同期について以前に問い合わせましたが、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);
}
};
は、私は(待ちを呼び出すと仮定)と信号()2つの異なるスレッドから、これはスレッドセーフになります。同じオブジェクトの2つの関数で同じロックを使用すると、デッドロックや競合状態が発生しますか?
編集:今私のプログラムでこれを使用していますが、正常に動作します。私はそれがちょうど運であるかどうか確信していません