所以我用boost :: lockfree :: queue编写了一个多线程程序,代码与给定的例子几乎相同 http://www.boost.org/doc/libs/1_62_0/doc/html/lockfree/examples.html。好吧,我有4个队列,数据是结构而不是int。
问题是我的程序在运行时占用了我的cpu的95%而且速度非常慢。经过一番调查后我发现boost :: lockfree :: queue :: pop占用了80%的cpu用量,这并不奇怪,因为这两个循环
while (!done) {
while (queue.pop(value))
++consumer_count;
}
我可以做些什么来减少CPU使用率,还是应该升级CPU?我在Windows 10上使用boost 1.61,visual studio 2015,顺便说一句。
非常感谢
答案 0 :(得分:0)
你有什么期望?以下代码与您的相同(就吃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。