[英]is std::queue thread safe with producer and multiple consumers
如何使隊列線程安全? 我需要按/彈出/前/后清除。 是什么類似的提升?
我有一個生產者和一個或多個消費者。
如果一個或多個線程正在寫入,則std::queue
不是線程安全的。 並且它的接口不利於線程安全實現,因為它有單獨的方法,如pop()
, size()
和empty()
,這些方法必須在外部同步。
常見的方法*是實現具有更簡單接口的隊列類型,並在內部使用鎖定機制來提供同步。
*搜索“並發隊列C ++”應該會產生很多結果。 我在這里實現了一個非常簡單的玩具,其限制是僅使用標准C ++。 另見Anthony Williams的書中的C ++並發 ,以及他的博客。
您必須保護對std::queue
訪問。 如果你使用boost::mutex
使用boost保護它。 現在,如果您有多個讀者和一個boost::unique_lock
器線程,請查看boost::shared_lock
(對於讀者)和boost::unique_lock
(對於writer)。
但是,如果您遇到編寫器線程飢餓,請查看boost::shared_mutex
。
在boost 1.53中有一個鎖定隊列http://www.boost.org/doc/libs/1_53_0/doc/html/boost/lockfree/queue.html ,沒有這樣的互斥或smth。
您必須在每次操作時保護它,例如使用std::mutex
。 如果你還沒有C ++ 11,Boost將是另一種選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.