2011-07-18 3 views
1

私はTBB concurrent_bounded_queueを使用しています。このクラスは、利用可能な要素がない場合にブロックされるpopを使用できるためです。キューのデフォルトサイズは?私はまた、parallel_whileまたはpipelineを使ってconcurrent_bounded_queueを使用する代わりに本を読んで、concurrent_boundedキューの代わりにこれらがどのように役立つのでしょうか?任意のplsは、paralle_whileまたはパイプラインを使用して2つのスレッド間でデータを共有して同期を行う方法の例を挙げることができますか?C++と同期のTBB concurrent_boundedキュー

ありがとうございます!

答えて

1

デフォルトサイズはゼロです。つまり、キュー内の要素はありません。しかし、おそらくデフォルトの容量(つまり、バインド)を知りたいと思うかもしれません。 TBB Reference manualはその

concurrent_bounded_queue <言う...>容量を指定する機能が追加されます。デフォルトの容量は、キューを事実上無制限にします。

およびソースコード点検(SRC/TBB/concurrent_queue.cpp)容量のデフォルトの初期化のために、以下の式が得られる:pipelineまたはparallel_whileとして

my_capacity = size_t(-1)/(item_size>1 ? item_size : 2); 

(後者は廃止されます)、これらのコンテナではなくアルゴリズムなので、は2つのスレッド間でデータを共有するためにを使用できません。しかし、場合によっては、pipelineを使用すると、スレッドベースの設計を置き換えることができます。例えば、単純なプロデューサ - コンシューマシナリオは、第1ステージがデータを生成し、それを第2ステージに渡して処理(消費)する2ステージパイプラインに置き換えることができる。

関連する問題