单个生产者单一消费者FIFO的STL容器?

时间:2015-12-16 08:53:39

标签: c++ c++11 concurrency stl lockless

所以,假设我有struct A { int val1; int val2}; 还有std::queue<A> fifo

两个主题, Reader线程:从A读取所有内容,并清除它。 Writer线程:一次写一个A到队列。

std :: queue是否足以维护一个带有一个阅读器和一个写入器的无锁线程安全的fifo容器?如果没有,任何其他stl容器可以工作吗? dequeue是std :: queue中的默认底层。

1 个答案:

答案 0 :(得分:3)

不,你绝对不能直接使用任何STL容器。您可以使用的是C ++已经存在的许多无锁队列实现中的任何一个。你应该搜索“SPSC”,意思是Single Producer,Single Consumer。例如,来自Boost:http://www.boost.org/doc/libs/1_59_0/doc/html/boost/lockfree/spsc_queue.html

这里有一个等待的,固定大小的实现:SPSC lock free queue without atomics(但请注意那里的答案和评论,这解释了问题中的实现不是完全安全的一些方法,并提供一些解决方案)。