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