gpt4 book ai didi

c++ - parallel_for 中定义的变量范围

转载 作者:行者123 更新时间:2023-11-30 03:02:33 25 4
gpt4 key购买 nike

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

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 block 中定义的所有变量(即 var1var2var3 , var4, u, pl, values) 将具有每个循环迭代的局部范围,即不会跨线程或循环迭代共享?

此外,只要多个线程只是读取(而不是写入),就可以安全地访问 testValues 吗?

最佳答案

lambda 内部的所有变量都是执行它的线程的本地变量,所以是的,它们是安全的。

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com