我碰到了以下帖子,其中详细介绍了生产者使用者无锁队列:
C++ Lock free producer/consumer queue
使用自定义编写的链表。当可以只使用std::queue
并在数据结构周围编写一些访问器包装时,编写链接列表的目的是什么?
最佳答案
在std::list
和push_back
都不修改大小成员的情况下,无法设计pop_front
。如果您有两个线程同时调用它们,它们可能会破坏列表。您可以通过使用锁来编写包装访问器以使其安全。这破坏了无锁结构的目标。 push_back
的pop_front
和std::deque
都将需要修改节点指针的内部“vector ”,并且如果两个不同的线程同时调用它们,它们也会破坏双端队列。
可以轻松地编写类似列表的列表或循环缓冲区无锁定的生产者/消费者队列,但是没有标准的C++容器符合条件。