c++ - boost::lockfree::queue 正在耗尽我的 CPU

标签 c++ multithreading boost

所以我用boost::lockfree::queue写了一个多线程程序,代码和给定的例子差不多 http://www.boost.org/doc/libs/1_62_0/doc/html/lockfree/examples.html .嗯,我有 4 个队列,数据是结构而不是 int。

问题是我的程序在运行时占用了 95% 的 CPU,而且速度非常慢。经过一些调查,我发现 boost::lockfree::queue::pop 占用了 80% 的 cpu 使用率,这并不奇怪,因为这两个循环

while (!done) {
    while (queue.pop(value))
        ++consumer_count;
}

我可以做些什么来减少 CPU 使用率,还是应该升级我的 CPU?我在 Windows 10 上使用 boost 1.61,visual studio 2015,顺便说一下。

非常感谢

最佳答案

你期待什么?下面这段代码和你的一样(吃CPU方面)

int counter = 0;
bool condition_1 = false;
bool condition_2 = false;
while(!condition_1) {
  while(!condition_2) {
    ++counter;
    condition_2 = true;
  }
}

恕我直言,当轮询队列时,您需要的是某种通知机制(例如 condition_variable)。否则,不断轮询它,显然会吃掉 cpu。

关于c++ - boost::lockfree::queue 正在耗尽我的 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074748/

相关文章:

c++ - 使用空的 Boost 累加器

c++ - 从 char* 到 int 的无效转换。 C++ 错误;

C++ 数组 [索引] 与索引 [数组]

c++ - 为什么boost mpl set允许非唯一类型

c - 尽管运行 pthread_exit,分离的线程不会退出?

java - 静态类中的线程安全和泛型

c++ - boost::process 抛出 LNK2019:未解析的外部符号

c++ - 如果一个引用一旦被初始化为一个对象,它就不能被改变,为什么会这样呢?

c++ - boost::multi_index_container 是否连续存储在内存中?

c++ - 哪些低级 Windows 特定函数用于在 Windows 中实现 std::thread/boost::thread/pthread?