pthread_cond_tではmutexを関連付ける必要があります。条件を通知するときは、mutexを保持した状態でpthread_cond_broadcastを呼び出しますか?
などのコードを見たことがあります。pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_cond_broadcast(&cond);
pthread_mutex_unlock(&mutex);
と
pthread_mutex_lock(&mutex);
//code that makes condition true
pthread_mutex_unlock(&mutex);
pthread_cond_broadcast(&cond);
どちらが適切ですか? (それは重要ですか?)
私はあなたの答えを見つけました。私はあなたのリンクをたどりました。私は、あなたが引用したビットが以前のビットに関連していると思います。「複数のスレッドが条件変数でブロックされている場合、スケジューリングポリシーはスレッドのブロック解除順序を決定します。 – wilx
@wilx:はい、私の心配は "予測不可能なスケジューリングの動作"によって許可されているものです。たとえば、スケジューラに文書化されている、またはオプションがあると、mutexと条件変数がFIFOベースで起床するスレッドを選択するとします。 '' pthread_cond_signal''の呼び出し側がmutexを保持していない場合、その動作がFIFOであるとは予想されませんか?私はそう考えていますが、私は "予測可能"という正式な定義を知らないので、それがわかりにくいのです。 RTシステムを除いて、私はいつもスケジューリングを予測不可能なものとして扱いますが、私はそれが奇妙になることを望んでいません。 –
ロック解除前またはロック解除後にブロードキャストを送信するかどうかは重要ではありません。非常に難しいことですが、ロックを解除した後に信号を移動するとコードが壊れます。 –