我正在编写一些简单的示例来了解OpenMP程序的工作原理。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <omp.h>
int main (int argc ,char* argv[]){
omp_set_num_threads(4);
int j =0;
#pragma omp parallel private (j)
{
int i;
for(i=1;i<2;i++){
printf("from thread %d : i is equel to %d and j is equal to %d\n ",omp_get_thread_num(),i,j);
}
}
}
所以在这个例子中我应该每次都得到j=0
,
不幸的是结果是j == 0
3次,和j == 32707
一次。
我的例子出了什么问题?
如果你想要每个线程都有一个firstprivate(j)
的私有副本,初始值是进入并行区域之前的值,请使用private(j)
而不是j
。