我打算为我的多线程应用程序使用boost::lockfree::queue 。一个boost 示例说明了无锁队列的消耗,如下所示:
boost::atomic<bool> done (false);
void consumer(void)
{
int value;
while (!done) {
while (queue.pop(value))
++consumer_count;
}
while (queue.pop(value))
++consumer_count;
}
我的问题是这部分:
while (!done) {
//do something
}
我通常用于condition variable
这种情况,但上述代码片段的简单性远比条件变量的复杂性更具诱惑力。
尽管consumer
将有自己的线程,但它几乎在整个程序期间循环。我更担心,因为很多时候该//do something
部分没有被调用(队列为空),并且可以给其他线程的大量CPU时间被这个线程浪费了。我对吗?这是一种常见的做法吗?
我需要有人告诉我我错了,我不应该因为这样的原因而担心这个。或建议我更好的方法。
谢谢