#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 ?
}
谢谢!
P.S。如果局部变量是自动私有的,那么使用 private 子句有什么意义呢?
答案 0 :(得分:42)
是的,局部变量是自动隐私的。
private
子句存在的原因是you don't have to change your code。
在没有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
语句。
答案 1 :(得分:4)
并行区域内的数据对每个线程都是私有的。
请参考http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [数据共享属性条款]