在不使用条件变量的情况下唤醒线程的最快方法

我试图通过设置后台线程来解决某个特定任务来加速一段代码。 当是时候解决我的任务了,我想唤醒这些线程,做好工作并再次阻止他们等待下一个任务。 任务总是一样的。

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

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

你有没有建议快速唤醒而不使用mutexcon_var

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

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


这些功能应该很快。 如果他们花费很大一部分时间,那么您很可能会频繁地切换线程。

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

如果由于任务之间的依赖关系,这是不可能的,那么你的应用程序根本不适合多线程。


为了在多线程应用程序中获得性能,产生与CPU一样多的线程,而不是每个任务的单独线程。 否则,最终会产生很多来自上下文切换的开销。

你也可以考虑让你的算法更线性(即通过使用非阻塞调用)。

链接地址: http://www.djcxy.com/p/51947.html

上一篇: fastest way to wake up a thread without using condition variable

下一篇: Change image source