簡體   English   中英

是生產者和多個消費者的std :: queue線程安全

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM