gpt4 book ai didi

c++ - 单一生产者单一消费者FIFO的STL容器?

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:20 25 4
gpt4 key购买 nike

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

两个线程,读者线程:从A中读取所有内容,并清除。Writer线程:一次写入一个A到queue中。

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 lock free queue without atomics (但请注意那里的答案和评论,它们解释了问题中的实现并不完全安全的一些方式,并提供了一些解决方案)。

关于c++ - 单一生产者单一消费者FIFO的STL容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com