【发布时间】:2015-08-26 19:45:21
【问题描述】:
如何开发线程安全的生产者/消费者模式?
在我的例子中,生产者在一个线程中运行,而消费者在另一个线程中运行。
std::deque 是否安全?
我可以在一个线程中 push_back 到双端队列的后面,在另一个线程中 push_front 吗?
编辑 1
就我而言,我知道 std::deque 中的最大项目数(例如 10)。有什么办法可以预先为项目保留足够的空间,所以在处理过程中,不需要更改队列内存的大小,因此确保当我将数据添加到后面时,前面的数据不会发生变化?
【问题讨论】:
-
std::deque就像任何其他 STL 容器默认情况下不是线程安全的。推入时需要make it thread safe。 -
@Vinzenz .. 并从中弹出。
-
我在github.com/mikeando/Thread-Utils 有一个单一生产者多消费者队列的简单实现 - 它可能已损坏,可能无法执行您想要的操作等。而且它的旧版本不使用漂亮的 C++ 11 个功能,但我建议使用 Sigismondo 答案中的增强功能(不要认为增强功能在我写我的时候存在)
标签: c++ design-patterns std producer-consumer