C ++多线程执行速度减慢

时间:2011-04-13 14:49:15

标签: c++ windows multithreading

我正在编写一个多线程c ++应用程序。当线程A执行的计算成本非常高时,它会减慢线程B,C和D.如何防止这种情况?

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

另外,我建议backgroundworker从队列中选择它的工作。然后可以将队列用作限制计算的方法:

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

$ 0.02

答案 3 :(得分:0)

有几种方法:

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

答案 4 :(得分:0)

您可能还希望查看让计算绑定的线程将处理器转移到其他线程。有关执行此操作的各种方法,请参阅this post