C++ OpenMP,通过函数调用全局变量

C++ OpenMP,通过函数调用全局变量,c++,visual-c++,openmp,C++,Visual C++,Openmp,在实现以下代码时: #pragma omp parallel for default(shared) private(rx,ry,a, Xmax,Ymax) for (a=0;a<30000;a++) {int mn,mnn; mn=part.i; mnn=part.j; setup(mn,mnn,a); } #pragma omp parallel表示默认(共享)私有(rx、ry、a、Xmax、Ymax) 对于(a=0;a函数中使用的全局变量将被共享,除非您使用threadprivat

在实现以下代码时:

#pragma omp parallel for default(shared) private(rx,ry,a, Xmax,Ymax)
for (a=0;a<30000;a++)
{int mn,mnn;
mn=part.i;
mnn=part.j;
setup(mn,mnn,a);
}
#pragma omp parallel表示默认(共享)私有(rx、ry、a、Xmax、Ymax)

对于(a=0;a函数中使用的全局变量将被共享,除非您使用
threadprivate
。因此
rx、ry、Xmax、Ymax
如果您在函数中调用它们,除非您使用
threadprivate

尝试以下带有和不带threadprivate的代码,并查看结果

#include <stdio.h>
int x;
//#pragma omp threadprivate(x)

void foo() {
    printf("%p\n", &x);
}

int main() {
    //#pragma omp parallel
    #pragma omp parallel private(x)
    {
        printf("%p\n", &x);
        foo();
    }
}
#包括
int x;
//#pragma omp threadprivate(x)
void foo(){
printf(“%p\n”、&x);
}
int main(){
//#pragma-omp并行
#pragma omp并行专用(x)
{
printf(“%p\n”、&x);
foo();
}
}
请参见“数据共享属性规则”下的 区域,但不在构造中”

区域中被调用例程中引用的文件范围或命名空间范围变量是共享的,除非它们出现在threadprivate指令中


OMP规范链接似乎已断开