生产者 - 消费者队列 - 标准::队列或用户编写的链表?

时间:2014-01-11 23:37:00

标签: c++ multithreading c++11 queue producer-consumer

我遇到了以下帖子,详细说明了生产者消费者无锁队列:

C++ Lock free producer/consumer queue

使用自定义编写的链表。当一个人可以使用std::queue并在数据结构周围写一些访问器包装器时,编写链表的目的是什么?

1 个答案:

答案 0 :(得分:0)

无法设计std::list,其中push_backpop_front都不会同时修改尺寸成员。如果你有两个线程同时调用它们,它们可能会破坏列表。您可以编写一个包装器访问器以使其安全,使用锁。这违背了无锁结构的目标。 push_back的{​​{1}}和pop_front都需要修改节点指针的内部“向量”,如果它们被两个不同的线程同时调用,那么它们腐败了deque。

可以轻松编写类似列表或循环缓冲区的无锁生产者/消费者队列,但没有标准C ++容器可以符合条件。