OpenMP:局部变量是否自动私有?

|
#pragma omp parallel
{
    int x; // private to each thread ?
}

#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
    int x; // private to each thread ?
}
谢谢! 附言如果局部变量是自动私有的,那么使用private子句有什么意义呢?     
已邀请:
        是的,局部变量是自动私有的。 之所以存在
private
子句,是因为您不必更改代码。 在没有private子句的情况下并行化以下代码的唯一方法
int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
    for(j = 0; j < n; j++) {
        //do something
    }
}
是更改代码。例如这样:
int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
    int j;
    for(j = 0; j < n; j++) {
        //do something
    }
}
那是完全有效的C89 / C90代码,但OpenMP的目标之一就是不必更改代码,只需添加可在编译时启用或禁用的
pragma
语句即可。     
        并行区域内的数据是每个线程专用的。 请参考http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [数据共享属性子句]     

要回复问题请先登录注册