2014-08-27 91 views
4

我正在尋找單生產者單消費者隊列與「阻塞」流行。 升壓spsc_queue除了一個方法的幾乎細:單生產者單一消費者隊列與「阻塞」流行

bool pop(T & ret); 
Pops one object from ringbuffer. 

此方法是「非阻塞的」,則返回立即如果沒有數據。 我希望這種方法能夠「阻塞」並等待一些數據到達。

我應該使用什麼樣的藏品?

upd至少有人可以推薦任何阻塞流行的C++隊列嗎?

+3

請參閱['tbb:concurrent_bounded_queue'](http://www.threadingbuildingblocks.org/docs/help/reference/containers_overview/concurrent_bounded_queue_cls.htm) – quantdev 2014-08-27 20:12:04

+0

有趣。我應該用intel版本替換boost spsc_queue嗎? – javapowered 2014-08-27 20:18:01

+0

除了英特爾的實現,我們還有什麼? – javapowered 2014-08-27 20:41:29

回答

0

併發隊列很少提供彈出窗口阻止接口:在很多情況下,用戶需要執行阻止邏輯,從而避免了隊列實現中不必要的開銷。

也就是說,你可以添加一個包裝你的周圍queue::pop做一些事情,如:

bool blocking_pop(T & t) { 
    while(!queue.empty()) 
    wait(); 
    return queue.pop(t); 
} 

英特爾TBBtbb::concurrent_bounded_queue,這可能也適合您的需求。

+0

爲什麼包裝現有的容器比使用tbb:concurrent_bounded_queue更好? – javapowered 2014-08-28 05:46:45

+0

@javapowered我並不認爲它更好,但它可能會影響到您當前的代碼庫(如果您還沒有它,沒有必要在您的項目中使用tbb), – quantdev 2014-08-28 05:49:43

+0

下注此類性能與英特爾的實施相比,隊列要差得多嗎? – javapowered 2014-08-28 05:51:36

相關問題