作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如何使队列线程安全?我需要推/弹出/前/后并清除。 boost中是否有类似的东西?
我有一个生产者和一个或多个消费者。
最佳答案
如果一个或多个线程正在写入,
std::queue
不是线程安全的。而且它的接口(interface)不利于线程安全的实现,因为它有pop()
、size()
和empty()
等单独的方法> 必须在外部同步。
一种常见的方法*是实现一个具有更简单接口(interface)的队列类型,并在内部使用锁定机制来提供同步。
* 搜索“并发队列 C++”应该会产生很多结果。我实现了一个非常简单的玩具 here ,其中限制是仅使用标准 C++。另请参阅 Anthony Williams 的著作C++ concurrency in action,以及他的博客。
关于c++ - 对于生产者和多个消费者来说,std::queue 线程是安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21302142/
我是一名优秀的程序员,十分优秀!