我正在寻找一种支持单生产者和多消费者的无锁队列数据结构实现方法。我已经研究了Maged Michael和Michael Scott(1996)的经典方法,但他们的版本使用了链表。我希望有一种实现方式,可以使用有限循环缓冲区,同时使用原子变量实现。
另外,我不确定为什么这些经典方法都是设计用于需要大量动态内存管理的链表中。在多线程程序中,所有内存管理例程都是串行化的。使用锁定方法与动态数据结构相结合,难道不会削弱无锁方法的优势吗?
我正在尝试在Intel 64位体系结构上使用pthread库编写C/C++代码。
谢谢, Shirish
std::list
提供自己的分配器。由于您只有一个生产者,因此此分配器不需要同步。例如,它可以从预分配的缓冲区中“分配”列表节点,并在空间用尽时使用全局同步的类似于“真实”的malloc()
分配器来分配新的缓冲区。这意味着它仅在1%的调用中使用同步。 - user319799