我正在使用TBB concurrent_bounded_queue,因爲如果沒有元素可用,此類允許我們使用彈出窗口。什麼是隊列的默認大小?我還讀了一本書,而不是使用concurrent_bounded_queue使用parallel_while或pipeline,這些將如何幫助我們取代併發隊列?任何人都可以舉例說明如何使用paralle_while或pipeline來在兩個線程之間共享同步數據?C++中的TBB concurrent_bounded隊列和同步
謝謝!
我正在使用TBB concurrent_bounded_queue,因爲如果沒有元素可用,此類允許我們使用彈出窗口。什麼是隊列的默認大小?我還讀了一本書,而不是使用concurrent_bounded_queue使用parallel_while或pipeline,這些將如何幫助我們取代併發隊列?任何人都可以舉例說明如何使用paralle_while或pipeline來在兩個線程之間共享同步數據?C++中的TBB concurrent_bounded隊列和同步
謝謝!
默認大小當然是零,即隊列中沒有元素。但是您可能想知道默認容量(即綁定)。 TBB Reference manual表示
concurrent_bounded_queue < ...>增加了指定容量的能力。默認容量使隊列實際上無界限。
和源代碼的檢查(SRC/TBB/concurrent_queue.cpp)給出了容量的缺省初始化以下公式:
my_capacity = size_t(-1)/(item_size>1 ? item_size : 2);
至於pipeline
或parallel_while
(注意後者已被棄用),那些是算法,而不是容器,所以不能用在兩個線程之間共享數據。但在某些情況下,使用pipeline
可以取代基於線程的設計。例如,一個簡單的生產者 - 消費者場景可以用兩階段流水線替換,其中第一階段生成一段數據並將其傳遞到第二階段以處理(消耗)。