c++ - 关键字 "shared"是否可以防止竞争条件?

标签 c++ openmp atomic

我不清楚“共享”在 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/

相关文章:

c - JNI : undefined symbol GOMP_parallel

windows - OpenACC 与 OpenMP

arrays - 如何使用openmp并行化数组元素的移动

parallel-processing - 为什么 OpenMP 原子指令不支持赋值?

hadoop - Hive 的创建外部表是否复制数据?

r - is.atomic() 与 is.vector()

c++ - 发布/订阅和智能指针

c++ - 如何一次打印带有空格的整个 wchar_t? (c++)

c++ - 在 OpenCV 中使用 Nvidia DIGITS 训练模型时出错

C++ - 基本线程问题