私はPOSIXで作業していますが、スレッドは3つあります。pthread_cond_broadcastは、条件変数で待機していないスレッドのブロックを解除します。
以下のすべてのスレッドは、同じmutexロックを使用しています。
スレッド1は、条件を満たすためにpthread_cond_waitを使用して待機しています(待機はwhileループ内にあるため、無条件待機でもありません)。 スレッド2は、条件が満たされたときにpthread_cond_broadcastを発行します。 スレッド3は、ロックにmutexを使用しますが、条件変数を待つことはありません。
スレッド1はシグナル/ブロードキャストを待っていて、スレッド3はミューテックスロックを待っています(このスレッドはミューテックスロックを取得するための待機中です)。スレッド2がブロードキャストを送信すると、スレッド3はスレッド1ではなくミューテックスを取得しています。なぜこれが起こりますか?私はglibc2.19を使ってdebian 8.3を使用しています。 条件付き変数を待っていたスレッドをブロードキャストで起動してはいけませんか?
ミューテックスが他のスレッドに保持されなくなったら、それを取得するのを待っているスレッドはいけませんか? – EOF