2017-09-28 4 views
0

最近、インタビューの1つでこの質問をしました。私はこれを実装する最良の方法が何であるか知りたいと思います。Cの単一スレッド内の複数のキュー

3つのスレッドt1、t2、t3と2つのキューq1、q2があります。
t1はq1にデータを書き込みます
t2はq2にデータを書き込みます
t3はq1とq2のデータを利用可能になるとすぐに読み取る必要があります。

私は条件変数を使ってq1とq2の両方から読み取ることができると考えました。それが可能か、それとももっと良いアプローチがあるのか​​。

+2

待ち行列にローカルソケット( 'AF_LOCAL')を使用し、パッシブ待ちの' select() 'または' pselect() '関数を使用することを検討しましたか? –

+0

@FabienBouleau Pipeも動作します。 –

+0

@FabienBouleauはい。このアプローチは非常に可能です。ありがとう。任意のアイデアキューと同じを達成する方法? –

答えて

0

セマフォをt3待機しましたか? t1、t2はデータをキューイングし、ユニットをセマフォにポストします。 t3が実行されると、処理されるアイテムのために両方のキューが一度ポーリングされ(その中にデータがあります)、そのアイテムをデキュー/ハンドルしてさらにセマフォを待つためにループします。

私は、キュークラスがスレッドセーフであると仮定します(そうしないと、mutexで保護します)。

関連する問題