gpt4 book ai didi

c++ - 无限循环不会浪费cpu资源吗?

转载 作者:行者123 更新时间:2023-11-30 01:52:07 26 4
gpt4 key购买 nike

我打算使用 boost::lockfree::queue对于我的多线程应用程序。 boost example像这样说明无锁队列消耗:

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
}

在这种情况下,我通常使用条件变量,但上面代码片段的简单性远比经历条件变量的复杂性更诱人。

尽管消费者 有自己的线程,但它几乎在整个程序运行期间都在循环。我更担心的是因为有很多次 //do something 部分没有被调用(队列是空的)并且这个线程浪费了很多可以给其他线程的 CPU 时间.我对吗?是THIS常见做法?

我需要有人告诉我我错了,我不应该因为某某原因而为此担心。或者给我一个更好的方法。

谢谢

最佳答案

对于延迟敏感的应用程序来说,这是一种非常常见的做法,即唤醒线程所花费的时间是 Not Acceptable 应用程序。

是的,在那种情况下(称为“自旋”),CPU 时间被浪费在检查 bool 值上。 Spinlocks以类似的方式实现,使它们更适用于需要忙碌等待的场景。

当生产者到消费者路径的延迟不重要时,您应该更喜欢条件变量(甚至显式休眠)以与其他线程/进程共享 CPU。而且无论如何,当延迟很关键时,您很少需要无锁容器(这通常会暴露大量开销以避免锁定)

关于c++ - 无限循环不会浪费cpu资源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com