我碰到了以下帖子,其中详细介绍了生产者使用者无锁队列:

C++ Lock free producer/consumer queue

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

最佳答案

std::listpush_back都不修改大小成员的情况下,无法设计pop_front。如果您有两个线程同时调用它们,它们可能会破坏列表。您可以通过使用锁来编写包装访问器以使其安全。这破坏了无锁结构的目标。 push_backpop_frontstd::deque都将需要修改节点指针的内部“vector ”,并且如果两个不同的线程同时调用它们,它们也会破坏双端队列。

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

09-10 03:34
查看更多