2017-07-07 3 views
0

私は2つのスレッドを持つアプリケーションを作る必要があります。 1つはデータ(ファイルパスとそのパスに対して実行するアクション - 作成/更新/削除)を生成し、もう一方のスレッドはこのデータを消費し、実際にタスクを実行する必要があります。スレッド間でデータを処理するためにC++でブロックキューを実装する方法は?

これは私が待ち行列を持ち、あるスレッドからデータを入れ、もう一方のスレッドがアイテムを取り出してアクションを順番に実行すると考えました。

私の問題は、これらのスレッド間でこのデータを共有できるようにすることです。次に、データをキューに入れるのを待っている間に2番目のスレッドをブロックする方法はありますか?キューが空でないかどうかを確認するのにちょっとした時間を費やすだけで、CPUは何の役にも立たないように食べるでしょう。数ミリ秒または数秒ごとにチェックする「スリープ」を追加すると効率的ではありません。

どうすればいいですか?そのようなデータを実装するライブラリはどれですか?

+0

広すぎます。あなたは自分でそれを実装しようとする必要があり、あなたが遭遇した特定の問題を解決する方法を私たちに尋ねるよりも。さらに、ここではソフトウェアやライブラリを求めています。 – SergeyA

+0

'std :: mutex'を使うことができます。また、キューコードを実装する場合は、std :: atomicを使用してください。私はあなたのコードを共有しています。ここではスレッドをシンクロライズしています。 –

+1

例単一リンクされたリストに基づくカスタムキューを使用して、データを読み取るために1つのスレッドを使用し、データを書き込むためにファイルをコピーするWindowsのCコード。これは、Windows WaitForMultipleObjects()を使用して、1回のアトムコールでミューテックスとセマフォを待つことに注意してください。 [mtcopy.zip](http://rcgldr.net/misc/mtcopy.zip)。 – rcgldr

答えて

関連する問題