所以,假设我有一个struct A { int val1; int val2};
和std::queue<A> fifo
两个螺纹,读线程:从A中读取所有内容,并将其清除。写入线程:一次写入一个A到队列。
std::queue是否足以维护一个带有一个读写器的无锁线程安全fifo容器?如果没有,其他stl容器能工作吗?dequeue是std::queue中的默认底层。
不,您绝对不能直接使用任何STL容器。您可以使用C++中已经存在的许多无锁定队列实现中的任何一个。您应该搜索"SPSC",意思是"单一生产者"、"单一消费者"。例如,从Boost:http://www.boost.org/doc/libs/1_59_0/doc/html/boost/lockfree/spsc_queue.html
一个无等待、固定大小的实现就在这里:没有原子的SPSC无锁队列(但请注意那里的答案和注释,它们解释了问题中的实现不完全安全的一些方式,并提供了一些解决方案)。