boost c ++无锁队列vs共享队列

elv*_*kaj 10 c++ multithreading boost producer-consumer lock-free

我是多线程编程的新手,我只知道最常见的Producer-Consumer-Queue.我正在使用boost c ++库,我不知道是否更好地使用boost :: lockfree :: queue或使用`mutex`和`condition_variable`的std :: queue周围的包装类.

哪里更好地使用无锁数据结构哪里更好是使用基于`mutex`和`condition_variables`的简单实现?

Mar*_*mes 17

在您的应用中同时尝试,看看哪个效果最好.

通常,当队列几乎总是有条目时,轮询无锁队列最有效,当队列几乎总是为空时,阻塞队列效果最好.

由于内核信令,阻塞队列的缺点是延迟,通常约为2-20μS.这可以通过设计系统来减轻,以便消费者线程在每个排队项目上完成的工作比这个间隔花费更长的时间.

非阻塞队列的缺点是在轮询空队列时浪费CPU和内存带宽.这可以通过设计系统来减轻,以便队列很少是​​空的.

正如评论者已经暗示的那样,非阻塞队列在单CPU系统上是一个非常糟糕的主意.


小智 9

(补充)

从1.54开始,您应该了解一些要求

boost::lockfree::queue

  • T必须有一个复制构造函数
  • T必须有一个普通的赋值运算符
  • T必须有一个简单的析构函数

boost::lockfree::stack

  • T必须有一个复制构造函数

boost::lockfree::spsc_queue

  • T必须有一个默认的构造函数
  • T必须是可复制的