gpt4 book ai didi

c++ - 不使用条件变量唤醒线程的最快方法

转载 作者:可可西里 更新时间:2023-11-01 18:38:06 31 4
gpt4 key购买 nike

我正在尝试通过已经设置后台线程来解决一个特定任务来加速一段代码。当需要解决我的任务时,我想唤醒这些线程,完成工作并再次阻止它们等待下一个任务。任务总是相同的。

我尝试使用条件变量(以及需要与它们一起使用的互斥量),但我最终放慢了我的代码速度而不是加快了速度;这主要是因为对所有需要的函数的调用非常昂贵 (pthread_cond_wait/pthread_cond_signal/pthread_mutex_lock/pthread_mutex_unlock)。

使用线程池(我也没有)没有意义,因为它是一个过于通用的构造;在这里我只想谈谈我的具体任务。根据实现情况,我还会为队列支付性能损失。

对于不使用 mutexcon_var 的快速唤醒,您有什么建议吗?

我在考虑设置线程,比如定时器读取一个原子变量;如果变量设置为 1,线程将完成工作;如果它设置为 0,它们将休眠几微秒(我会从微秒休眠开始,因为我想避免使用 spinlocks,这对 CPU 来说可能太昂贵了)。你怎么看待这件事?非常感谢任何建议。

我正在使用 Linux、gcc、C 和 C++。

最佳答案

这些功能应该很快。如果它们占用了您的大部分时间,则很可能是您尝试过于频繁地切换线程。

尝试缓冲工作队列,并在积累了大量工作后发送信号。

如果由于任务之间的依赖关系而无法做到这一点,那么您的应用程序根本不适合多线程。

关于c++ - 不使用条件变量唤醒线程的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593035/

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