首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >boost c++无锁队列与共享队列

问boost c++无锁队列与共享队列
EN

Stack Overflow用户
提问于 2013-04-29 17:20:13
回答 4查看 22.3K关注 0票数 13

我是多线程编程的新手,我只知道最常见的生产者-消费者-队列。我正在使用boost c++库,我不知道使用boost::lockfree::queue还是使用使用mutex和condition\_variable的std::queue的包装类更好。

使用无锁数据结构更好,使用基于mutex和condition\_variables的简单实现更好

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-29 18:27:20

在你的应用程序中尝试这两种方法,看看哪一种表现最好。

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

阻塞队列的缺点是延迟,通常是2-20 uS的数量级,这是由于内核信号。这可以通过设计系统来缓解,使使用者线程在每个排队项上所做的工作花费的时间比这个间隔长得多。

非阻塞队列的缺点是在轮询空队列时浪费CPU和内存带宽。这可以通过设计系统以使队列很少为空来缓解。

正如评论者已经暗示的那样,在单CPU系统中,非阻塞队列是一个非常糟糕的想法。

票数 22
EN

Stack Overflow用户

发布于 2013-07-17 00:47:45

(补充)

从1.54开始,您应该意识到一些要求

boost::lockfree::queue

  • T必须具有复制构造函数
  • T必须具有简单赋值运算符
  • T必须具有简单析构函数

boost::lockfree::stack

  • T必须具有复制构造函数

boost::lockfree::spsc_queue

  • T必须具有默认的constructor
  • T必须是可复制的
票数 10
EN

Stack Overflow用户

发布于 2014-04-09 05:05:49

您还可以使用无锁队列来避免实时应用程序中的优先级反转。

例如,Android上的OpenSL在高优先级线程上提供了音频缓冲队列回调。如果这个线程必须等待低优先级线程持有的锁,那么它的高优先级调度就毫无意义,回调就会变得不规律,并且您可能会开始不足音频缓冲区--这会导致一些令人不快的响声。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16275112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档