要并行执行循环,我正在使用:

int testValues[16]={5,2,2,10,4,4,2,100,5,2,4,3,29,4,1,52};
parallel_for (1, 100, 1, [&](int i){
    int var1;
    for (var1=1; var1<=20000; var1++) {
        int var2, var3, var4;
        double u[45],pl;
        int values[16]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
        /* ... */
        for (var4=0; var4<16; var4++) {
            if (values[var4] != testValues[var4]) break;
        }
        /* ... */
    }
}

我是否可以确定parallel_for块内定义的所有变量(即var1var2var3var4uplvalues)在每个循环迭代中都具有局部作用域,即不会在线程或循环迭代中共享?

另外,只要多线程仅读取(而不是写入),这样访问多个testValues是否安全?

最佳答案

lambda内部的所有变量都是执行该线程的线程的局部变量,因此是安全的。

从理论上读取/写入testValues数组是一个竞争条件,但是如果您确保仅同时读取和写入而不是同时写入或仅写入数组的不同部分,则应该是安全的。

关于c++ - 在parallel_for中定义的变量范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10072286/

10-12 20:03