gpt4 book ai didi

windows - std::condition_variable notify_all 不会同时唤醒所有线程

转载 作者:可可西里 更新时间:2023-11-01 11:44:46 32 4
gpt4 key购买 nike

我想知道 std::condition_variable notify_all 如何通知所有线程唤醒。

情况是我有一个主线程,一个渲染线程,每个线程都有自己的线程池来完成它需要的任何工作。例如,如果我有 6 个逻辑核心,则每个线程池将有 6 个工作线程。这些线程使用 notify_all 唤醒。每个线程池都有自己的条件变量/互斥锁组合,并且完全独立,因此它们不会相互冲突。

我遇到的问题是,有时,当渲染线程调用 notify_all 来唤醒工作线程时,一些会立即被唤醒,而另一些则需要很长时间,大约几毫秒。

我还注意到,这主要发生在这些线程被唤醒时,而主线程 worker 正忙于做自己的工作。因此,在负载很重的时候,当每个逻辑核心已经有一个线程在工作时,试图唤醒这些其他线程会表现出这种行为。因此,在等待 condition_variable 的 6 个线程中,可能有 4 个会被唤醒,另外两个在负载下降之前不会被唤醒。

我的问题是,这是预期的行为,还是我应该查看代码中的错误?请注意,线程总是会唤醒,并且在无负载或轻负载的情况下,它们通常会在大约同一时间唤醒。我的线程池设置也没有死锁或任何其他问题。那么,我是否只是看到了 condition_variable 的正确行为,其中一些线程可以被快速唤醒,而其他线程则需要 4 或 5 毫秒后才能唤醒?我怎样才能减轻这种行为?任何人都可以建议另一种方法来唤醒我的工作线程,这种方法可能效果最好吗?

提前致谢。

最佳答案

在他们被安排好之前,他们不能被叫醒。如果其他线程正在运行,它们将首先完成它们的时间片。

这还能如何工作?

关于windows - std::condition_variable notify_all 不会同时唤醒所有线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48220582/

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