Abr*_*ile 7 c c++ performance multithreading atomic
我试图通过设置后台线程来解决一个特定任务来加速一段代码.当我需要解决我的任务时,我想唤醒这些线程,完成工作并再次阻止它们等待下一个任务.任务总是一样的.
我尝试使用条件变量(和需要与它们一起使用的互斥量),但我最终减慢了代码速度,而不是加快速度; 主要是因为调用所有需要的函数非常昂贵(pthread_cond_wait/pthread_cond_signal/pthread_mutex_lock/pthread_mutex_unlock).
使用线程池没有任何意义(我没有),因为它是一个过于通用的构造; 在这里,我只想解决我的具体任务.根据实现情况,我还会为队列支付性能损失.
你有什么建议可以快速叫醒而不使用mutex或con_var吗?
我正在考虑设置线程,如定时器读取atomic variable; 如果变量设置为1,则线程将完成工作; 如果它被设置为0,它们将进入睡眠状态几微秒(我会以微秒睡眠开始,因为我想避免使用spinlocks它,这可能对CPU来说太昂贵).你怎么看待这件事?任何建议都非常感谢.
我使用的是Linux,gcc,C和C++.
这些功能应该很快。如果它们占用了您的大部分时间,则很可能您尝试切换线程过于频繁。
尝试缓冲工作队列,并在积累了大量工作后发送信号。
如果由于任务之间的依赖性而无法做到这一点,那么您的应用程序根本不适合多线程。