C++ C+中无等待队列的实现+;

C++ C+中无等待队列的实现+;,c++,concurrency,queue,nonblocking,C++,Concurrency,Queue,Nonblocking,有没有可能实现一个完全无等待且可以同时支持多个写入者和读取器的并发队列?我知道我可以使用互斥体或现有库,但我真的想自己实现它。有什么想法吗?你可以找到一个适用于多个入队器和出队器的无等待队列,但正如@David Schwartz所说的,这并不一定会因为没有等待而更快。 这是另一篇关于无等待队列的论文。 在这些论文的参考文献中,您还可以找到其他基于数组的队列,这意味着它们的容量有限,但它们比基于列表的队列快 如果您正在寻找一个实用的解决方案,Michael和Scott的无锁队列可能是一个不错的选择

有没有可能实现一个完全无等待且可以同时支持多个写入者和读取器的并发队列?我知道我可以使用互斥体或现有库,但我真的想自己实现它。有什么想法吗?

你可以找到一个适用于多个入队器和出队器的无等待队列,但正如@David Schwartz所说的,这并不一定会因为没有等待而更快。 这是另一篇关于无等待队列的论文。 在这些论文的参考文献中,您还可以找到其他基于数组的队列,这意味着它们的容量有限,但它们比基于列表的队列快

如果您正在寻找一个实用的解决方案,Michael和Scott的无锁队列可能是一个不错的选择


如果您想了解更多信息并亲自尝试,您可以找到一份可能的备选方案的良好简历,并提供一些代码示例。

Boost从1.53开始实施Michael Scott队列。我想我设计了一个单消费者单生产者类,这行得通吗?(我敢肯定,没有互斥锁,任意数量的消费者、生产者都是行不通的)@DEIMOS:你可能知道这一点,但使用单个MPMC结构可能不是最好的主意。最好避免完全共享,并为每个线程提供一个SPSC容器(快得多),其中单个使用者是一个收集所有线程本地队列的单个harvester线程。请记住,只有在没有(或很少)线程的情况下,无等待数据结构的性能往往优于基于互斥体的结构可以在不访问结构的情况下前进的线程。否则,无等待逻辑只会增加争用。这使得他们有利于“核心”的东西,比如内存管理,没有线程可以避免接触,但是对于不接近内核的东西来说是一个坏的选择。@ Mehrdad考虑两个核心和三个线程,A1、A2和B1。线程A1和A2经常访问同一个集合。螺纹B1不存在。如果线程A2正在等待互斥锁,则可以调度线程B1,从而允许线程A1和B1在没有争用的情况下运行。无等待的数据结构将使A1和A2一起运行,经常发生冲突,性能不佳。锁可以防止争用线程同时运行,从而提高性能。无等待数据结构实际上通过防止冲突线程被重新调度来最大化争用。