关键字“共享”是否会阻止竞争条件?

时间:2013-05-12 21:53:07

标签: c++ openmp atomicity

我不清楚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循环结束时给出准确的结果吗?如果没有,它到底是做什么的?

1 个答案:

答案 0 :(得分:0)

  

这会阻止竞争条件吗?

不,won't

  

程序员有责任确保多个线程正确访问SHARED变量(例如通过CRITICAL部分)

共享部分只是使多个线程可以看到相同的变量。

您可以使用关键部分或原子访问进行同步,但在情况下,您最好使用reduction子句:

#pragma omp parallel for reduction(+:num1)