C 错误的结果专用阵列openmp

C 错误的结果专用阵列openmp,c,arrays,parallel-processing,openmp,C,Arrays,Parallel Processing,Openmp,我试图用C语言编写一个代码,使用openmp在我的双核机器上运行,从一个数组中读取int值并将结果放入另一个数组中,但我得到了错误的结果。这是我的代码: #include <stdlib.h> #include <stdio.h> #include <omp.h> int array[10]; int array2[10]; int np,iam; int main() { array[0]=12; // 0 array[1]=21; // 21

我试图用C语言编写一个代码,使用openmp在我的双核机器上运行,从一个数组中读取int值并将结果放入另一个数组中,但我得到了错误的结果。这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <omp.h>

int array[10];
int array2[10];
int np,iam;

int main() {
  array[0]=12; // 0
  array[1]=21; // 21
  array[2]=13; // 26
  array[3]=31; // 93
  array[4]=40; // 160
  array[5]=32; // 160
  array[6]=16; // 96
  array[7]=51; // 357
  array[8]=7;  // 56
  array[9]=23; // 207

  int i;
  #pragma omp parallel for private(i,array)
  for(i=0;i<10;i++){
    #if defined (_OPENMP)
      np = omp_get_num_threads();
      iam = omp_get_thread_num();
    #endif
    printf("iam %d and i am doing % d\n",iam,i);
    array2[i] = array[i]*i;
  }

  for(i=0;i<10;i++){
    printf("%d ",array2[i]);
  }
  printf("\n");
  return EXIT_SUCCESS;
}
并行版本结果如下:

iam 0 and i am doing  0
iam 0 and i am doing  1
iam 0 and i am doing  2
iam 0 and i am doing  3
iam 0 and i am doing  4
iam 0 and i am doing  5
iam 0 and i am doing  6
iam 0 and i am doing  7
iam 0 and i am doing  8
iam 0 and i am doing  9
0 21 26 93 160 160 96 357 56 207
iam 0 and i am doing  0
iam 0 and i am doing  1
iam 0 and i am doing  2
iam 0 and i am doing  3
iam 0 and i am doing  4
iam 1 and i am doing  5
iam 1 and i am doing  6
iam 1 and i am doing  7
iam 1 and i am doing  8
iam 1 and i am doing  9
0 -1217558997 1859518440 6 0 -1792801609 1284743096 -364 -1166026656 0 

编辑1:我需要数组“array”是私有的。在这种情况下它没有意义,但我正在尝试将数组用作专用数组,以便稍后在我正在处理的另一种情况下使用它。

我发现解决方案正在使用:

#pragma omp parallel for private(i) firstprivate(array)
firstprivate将外部环境中的值引入并行区域。使用private子句不会从外部上下文中获取值,它只是声明一个private而不是初始化变量,因此该变量具有随机值