C OpenMP竞争条件?
我读到OpenMP中的变量在默认情况下是共享的。这是否意味着在下面的代码中,应该对从0到N-1的所有数字求和,存在竞争条件C OpenMP竞争条件?,c,openmp,race-condition,C,Openmp,Race Condition,我读到OpenMP中的变量在默认情况下是共享的。这是否意味着在下面的代码中,应该对从0到N-1的所有数字求和,存在竞争条件 int sum = 0,i; #pragma omp parallel for for (i = 0; i < N; i++) sum+=i; int sum=0,i; #pragma-omp并行 对于(i=0;i
int sum = 0,i;
#pragma omp parallel for
for (i = 0; i < N; i++)
sum+=i;
int sum=0,i;
#pragma-omp并行
对于(i=0;i
是的,存在竞争条件。您应该在pragma中添加reduce(+:sum)
。这将有效地在每个线程中创建不可见的私有副本,然后在循环后对它们求和。并且也将i
private?这在这里是不必要的,因为openmp“for”中的循环迭代变量是自动私有的。