c++ - 使用线程改进 For 循环

标签 c++ multithreading parallel-processing thread-safety pthreads

假设我有一个迭代次数超过 9000 次的 for 循环,我想用线程以某种方式改进它,比如说 10。

Function Something(){

    for ( i = 0; i < 9000 ){
        DoStuff();
    }
}

用我的 10 个线程覆盖 9000 次迭代的最佳方法是什么?我目前正在使用 C++99 和 win32 pthreads,但我认为这是一个一般性问题。

提前致谢。

编辑:对于这个例子,假设 DoStuff() 处理繁重的处理,独立于其他迭代。此外,还有共享资源,但这些资源被互斥变量覆盖。

最佳答案

答案真的取决于 DoStuff() 实际做了什么。如果它是一些大 vector ,您要将其与另一个大(或小) vector 相乘,那么将它分成 10 个部分可能并不难。这适用于任何 CPU 密集型工作,其中每个计算都独立于其他计算。计算所有元素的总和也可以,但是你必须对一个部分求和,然后存储结果,当所有线程完成时,对不同的部分求和。

还有一些计算对于并行化是完全没用的。使用 F(n) = F(n-1) + F(n-2) 方法计算斐波那契数在线程中根本不起作用,因为在计算当前步骤之前需要上一步的结果步。

另一方面,如果 DoStuff 正在从单个文件中读取 1000 万条记录,那么拥有更多线程不太可能有任何帮助 - 因为顺序读取文件比分散读取快一点到处读取,磁盘比处理器慢得多,所以你不会得到任何东西。

关于c++ - 使用线程改进 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049596/

相关文章:

java - 访问被其他线程修改的Set

java - 并行调用 List 的方法?

go - 同时配置网络设备

R并行计算和僵尸进程

c++ - 配置 Eclipse 以构建和运行不同的应用程序

C# WinForms :- Why Thread Timer tick event not elapsed when UI is doing some other operation?

c++ - Windows Media Foundation 枚举相机设备

python - 'sys.excepthook' 和线程

c++ - 当我尝试在 C++ 中比较两个字符串时程序崩溃?

c++ - 多线程设计以及撤消/重做堆栈