私はpthreadと条件を学習しています。私の知る限り、一般的な待機中のスレッドを言うことができるように、このようなものです:私はスレッドをウェイクアップするpthread_cond_signal()
を使用している場合でも、ラインwhile(!condition)
が必要な理由Pスレッドと待機条件
pthread_mutex_lock(&m);
while(!condition)
pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
私は理解できない何かがあります。
私はpthread_cond_broadcast()
を使用している場合、私はすべて待機中のスレッドを覚ますと、そのうちの一つは、ミューテックスをアンロック(したがって、起床別に実行を転送する前に、再び条件が偽作ることができるので、私は、条件をテストする必要があることを理解することができますその時点で実行すべきではないスレッド)。 しかし、私がpthread_cond_signal()
を使用した場合、私はちょうどスレッドを起きるので、条件が真でなければなりません。したがってコードは次のようになります。
pthread_mutex_lock(&m);
pthread_cond_wait(&cond, &m);
// Thread stuff here
pthread_mutex_unlock(&m);
私は起こりうる偽信号について何かを読んでいます。理由はこれだけですか?なぜ私は偽のシングルを持っているのですか?それとも私には得られない何か他のものがありますか?
私は信号のコードは次のようであると仮定します。
pthread_mutex_lock(&m);
condition = true;
pthread_cond_signal(&cond); // Should wake up *one* thread
pthread_mutex_unlock(&m);
。投票された。これは受け入れられた答えより多くの注目を集めるべきです。 –