我不清楚“共享”在 openMP 中的作用。我看到 spec声明共享“声明一个或多个列表项由任务共享......”但我似乎不清楚。
例如,如果我有以下代码:
#pragma omp parallel for shared(num1)
for(i=0; i<m; i++) {
for(j=0; j < n; j++) {
if(myFunc(i,j) < 0) {
num1 += 256*u(i,j);
}
}
}
这会停止与 num1 的竞争条件并在这个 for 循环结束时给出准确的结果吗?如果不是,它具体是做什么的?
最佳答案
Will this stop race conditions?
不,它 won't :
It is the programmer's responsibility to ensure that multiple threads properly access SHARED variables (such as via CRITICAL sections)
共享部分只是让同一个变量在多个线程中可见。
您可以使用关键部分或原子访问进行同步,但在这种情况下您最好使用reduction子句:
#pragma omp parallel for reduction(+:num1)
关于c++ - 关键字 "shared"是否可以防止竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512423/