我是多线程编程的新手,我只知道最常见的 Producer-Consumer-Queue。 我正在使用 boost c++ 库,我不知道是使用 boost::lockfree::queue 还是使用 `mutex` 和 `condition_variable` 的 std::queue 周围的包装类更好。
哪里使用无锁数据结构更好,哪里使用基于 `mutex` 和 `condition_variables` 的简单实现更好?
最佳答案
在您的应用中尝试两者,看看哪个表现最好。
通常,轮询无锁队列在队列几乎总是有条目时效果最好,而阻塞队列在队列几乎总是空的时候效果最好。
由于内核信号,阻塞队列的缺点是延迟,通常为 2-20 uS。这可以通过设计系统来缓解,使消费者线程在每个排队项目上完成的工作花费的时间比这个间隔长得多。
非阻塞队列的缺点是轮询空队列时会浪费 CPU 和内存带宽。这可以通过设计系统使队列很少为空来缓解。
正如评论者已经暗示的那样,非阻塞队列在单 CPU 系统上是一个非常糟糕的主意。
关于c++ - boost C++ 无锁队列与共享队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16275112/