2016-04-30 17 views
4

(POSIXスレッドを使用して)複数のスレッドを同期させる必要があります。さらに、私はそれを達成するために条件変数(モニタ)を利用しています。条件変数(モニタ)を使用してスレッドを同期する

問題は、先着順戦略を実装する必要があることです。複数のスレッドが別のスレッドがその状態の変化を通知するのを待っているとしたら、pthread_cond_waitコールはスレッドをキュー自体に入れるか、これを達成するために明示的なキューを定義する必要がありますか?これに対する可能な解決法は、ロックを利用することもあります。

+0

*「先着順」の戦略は何ですか?それらによって生成されたスレッドまたはデータ?それがスレッドについてのものなら、あなたが何をしているかを証明するいくつかの学問的な仕事でなければ、あなたのデザインを再考してください。データに関するものであれば、データをキューに入れてキューを処理するだけです。 – ArturFH

答えて

0

Pthreads APIは、pthread_cond_wait + pthread_cond_signal/pthread_cond_broadcastコンボの公平性を保証しません。複数のスレッドが条件変数でブロックされている場合は

、スケジューリングポリシーは、スレッドが順序を決定するもの:specは、明示的スケジューリングポリシーは、待機中のスレッドが目を覚ますする順序を決定すると述べていますブロックされません。

スケジューラに頼ってほしくない場合は(has "aged well" like Linux' CFSの場合でも)、駐車を制御して自分自身を駐車解除する必要があります。

公正待ち行列の実装に関しては、MCS queueの上に構築することができます。

関連する問題