繁体   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