いくつかのスレッドをパッシブな待機モードにし、障壁に到着するとそれらを起動させる方法を見つけようとしています。私は到着すべき固定量のスレッドを持っています。Cでスレッドの受動待ちFIFOを作成するには?
私は最初に0で初期化するセマフォを考えていたので、ブロックされますがランダムに解放されます。私はFIFOのような同期の障壁に来た順にスレッドを解放するシステムを実装したいと思います。
私はまた、2つのセマフォを使用することについて考えました。ブロックするとスレッドを解放してソートします。スレッドが良いものであれば、それだけになります。そうでなければ、2番目のセマフォでブロックされます。しかし、このシステムは長くて厄介なようです。
私に役立つアイデアや提案がありますか?
はどうもありがとうございました:)
「私は好きです」 - それは確固たる要件ですか?もしそうでなければ、それは避けがたい厄介です。一般に、あなたが提案するような注文を強制するのは、避けるのが最善のデザインです。これは可能ですが、障壁から解放されたスレッドXは、直後に解放されるスレッドX + 1が先取りされる可能性があるため、あなたの 'like'は実際には実行可能ではありません。 –
私は、保証と無視できる利点を提供するたくさんの余分なシステムコールを本当に作成する必要がある場合は、それらをすべてCSに入れ、最後にセマフォを取得し、セマフォを待ち行列コンテナに入れ、CSを終了し、 semaをブロックする。最後のスレッドが入ると、.itはセマフォをデキューし、それらを順番に通知し、CS自体を終了して実行します。 –
Re、 "スレッドをパッシブな待機モードにして、障壁に到着すると目を覚ます"それは意味をなさない。受動的に何かを待っている限り、スレッドは決して「障壁に到達する」ことはありません。通常、「バリア」と言えば、「バリアに到達する」というのは、スレッドが待機する原因となる状況です。 –