1

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

ありがとう!

4

1 に答える 1

1

デフォルトのサイズはもちろんゼロです。つまり、キューに要素はありません。ただし、デフォルトの容量(つまり限界)を知りたいと思うかもしれません。TBBリファレンスマニュアルには次のように書かれています

コンカレント_bounded_queue<...>は、容量を指定する機能を追加します。デフォルトの容量により、キューは実質的に無制限になります。

また、ソースコード検査(src / tbb / constant_queue.cpp)は、容量のデフォルトの初期化について次の式を提供します。

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

pipelineまたは(後者は非推奨であることに注意してください)に関してparallel_whileは、これらはアルゴリズムであり、コンテナーではないため、2つのスレッド間でデータを共有するために使用することはできません。ただし、場合によっては、を使用するとpipelineスレッドベースの設計を置き換えることができます。たとえば、単純な生産者/消費者シナリオは、第1段階でデータを生成し、それを第2段階に渡して処理(消費)する2段階のパイプラインに置き換えることができます。

于 2011-07-20T20:31:04.703 に答える