我遇到了以下帖子,详细说明了生产者消费者无锁队列:
C++ Lock free producer/consumer queue
使用自定义编写的链表。当一个人可以使用std::queue
并在数据结构周围写一些访问器包装器时,编写链表的目的是什么?
答案 0 :(得分:0)
无法设计std::list
,其中push_back
和pop_front
都不会同时修改尺寸成员。如果你有两个线程同时调用它们,它们可能会破坏列表。您可以编写一个包装器访问器以使其安全,使用锁。这违背了无锁结构的目标。 push_back
的{{1}}和pop_front
都需要修改节点指针的内部“向量”,如果它们被两个不同的线程同时调用,那么它们腐败了deque。
可以轻松编写类似列表或循环缓冲区的无锁生产者/消费者队列,但没有标准C ++容器可以符合条件。