2011-07-18 60 views
1

我正在使用TBB concurrent_bounded_queue,因爲如果沒有元素可用,此類允許我們使用彈出窗口。什麼是隊列的默認大小?我還讀了一本書,而不是使用concurrent_bounded_queue使用parallel_while或pipeline,這些將如何幫助我們取代併發隊列?任何人都可以舉例說明如何使用paralle_while或pipeline來在兩個線程之間共享同步數據?C++中的TBB concurrent_bounded隊列和同步

謝謝!

回答

1

默認大小當然是零,即隊列中沒有元素。但是您可能想知道默認容量(即綁定)。 TBB Reference manual表示

concurrent_bounded_queue < ...>增加了指定容量的能力。默認容量使隊列實際上無界限。

和源代碼的檢查(SRC/TBB/concurrent_queue.cpp)給出了容量的缺省初始化以下公式:

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

至於pipelineparallel_while(注意後者已被棄用),那些是算法,而不是容器,所以不能用在兩個線程之間共享數據。但在某些情況下,使用pipeline可以取代基於線程的設計。例如,一個簡單的生產者 - 消費者場景可以用兩階段流水線替換,其中第一階段生成一段數據並將其傳遞到第二階段以處理(消耗)。