我正在尋找單生產者單消費者隊列與「阻塞」流行。 升壓spsc_queue除了一個方法的幾乎細:單生產者單一消費者隊列與「阻塞」流行
bool pop(T & ret);
Pops one object from ringbuffer.
此方法是「非阻塞的」,則返回立即如果沒有數據。 我希望這種方法能夠「阻塞」並等待一些數據到達。
我應該使用什麼樣的藏品?
upd至少有人可以推薦任何阻塞流行的C++隊列嗎?
我正在尋找單生產者單消費者隊列與「阻塞」流行。 升壓spsc_queue除了一個方法的幾乎細:單生產者單一消費者隊列與「阻塞」流行
bool pop(T & ret);
Pops one object from ringbuffer.
此方法是「非阻塞的」,則返回立即如果沒有數據。 我希望這種方法能夠「阻塞」並等待一些數據到達。
我應該使用什麼樣的藏品?
upd至少有人可以推薦任何阻塞流行的C++隊列嗎?
併發隊列很少提供彈出窗口阻止接口:在很多情況下,用戶需要執行阻止邏輯,從而避免了隊列實現中不必要的開銷。
也就是說,你可以添加一個包裝你的周圍queue::pop
做一些事情,如:
bool blocking_pop(T & t) {
while(!queue.empty())
wait();
return queue.pop(t);
}
英特爾TBB有tbb::concurrent_bounded_queue
,這可能也適合您的需求。
爲什麼包裝現有的容器比使用tbb:concurrent_bounded_queue更好? – javapowered 2014-08-28 05:46:45
@javapowered我並不認爲它更好,但它可能會影響到您當前的代碼庫(如果您還沒有它,沒有必要在您的項目中使用tbb), – quantdev 2014-08-28 05:49:43
下注此類性能與英特爾的實施相比,隊列要差得多嗎? – javapowered 2014-08-28 05:51:36
請參閱['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
有趣。我應該用intel版本替換boost spsc_queue嗎? – javapowered 2014-08-27 20:18:01
除了英特爾的實現,我們還有什麼? – javapowered 2014-08-27 20:41:29