C ++multithreading执行速度减慢

我在写一个multithreading的c ++应用程序。 当线程A有一个非常昂贵的计算操作来执行时,会减慢线程B,C和D.如何防止这种情况?

在Windows上,您可以使用Sleep(0)来释放剩余的时间片给正在等待的其他线程。

很难说没有看到代码,所以我只能给你建议降低线程A的优先级。 这可以使用SetThreadPriority函数完成。

请注意,您可以设置线程优先级( SetThreadPriority

另外,我建议后台工作者从队列中选择它的工作。 队列然后可以用来限制计算:

  • 您可以配置从队列中取多少个“任务”进行一次处理
  • 你可以锁定队列(使用信号灯+条件事件),这样你可以暂时阻止拾取新的任务。
  • 您现在可以将负载分配给更多的工作人员(例如,如果线程B,C,D暂时空闲,他们可以开始解除线程A的工作;在四核+桌面上非常有用)

$ 0.02

有几种方法:

  • 正如RedX建议的那样,在线程A的内部循环中添加Sleep(0)以使其产生更频繁的时间。 这是便宜和懒惰的解决方案。
  • 最好是改变线程的优先级。 当您调用CreateThread ,请传递CREATE_SUSPENDED以便线程不会立即启动。 然后调用SetPriorityClass将线程设置为较低的优先级,然后是ResumeThread

你可能也想看看让你的计算绑定线程产生处理器到其他线程。 看到这个职位的各种方法来做到这一点。