我是多线程编程的新手,我只知道最常见的生产者-消费者-队列。我正在使用boost c++库,我不知道使用boost::lockfree::queue还是使用使用mutex和condition\_variable的std::queue的包装类更好。
使用无锁数据结构更好,使用基于mutex和condition\_variables的简单实现更好
发布于 2013-04-29 18:27:20
在你的应用程序中尝试这两种方法,看看哪一种表现最好。
通常,当队列几乎总是有条目时,轮询无锁队列的效果最好,当队列几乎总是空的时候,阻塞队列的效果最好。
阻塞队列的缺点是延迟,通常是2-20 uS的数量级,这是由于内核信号。这可以通过设计系统来缓解,使使用者线程在每个排队项上所做的工作花费的时间比这个间隔长得多。
非阻塞队列的缺点是在轮询空队列时浪费CPU和内存带宽。这可以通过设计系统以使队列很少为空来缓解。
正如评论者已经暗示的那样,在单CPU系统中,非阻塞队列是一个非常糟糕的想法。
发布于 2013-07-17 00:47:45
(补充)
从1.54开始,您应该意识到一些要求
发布于 2014-04-09 05:05:49
您还可以使用无锁队列来避免实时应用程序中的优先级反转。
例如,Android上的OpenSL在高优先级线程上提供了音频缓冲队列回调。如果这个线程必须等待低优先级线程持有的锁,那么它的高优先级调度就毫无意义,回调就会变得不规律,并且您可能会开始不足音频缓冲区--这会导致一些令人不快的响声。
https://stackoverflow.com/questions/16275112
复制相似问题