1extern void abort (void); 2 3struct Y 4{ 5 int l[5][10]; 6}; 7 8struct X 9{ 10 struct Y y; 11 float b[10]; 12}; 13 14void 15parallel (int a, int b) 16{ 17 int i, j; 18 struct X A[10][5]; 19 a = b = 3; 20 21 for (i = 0; i < 10; i++) 22 for (j = 0; j < 5; j++) 23 A[i][j].y.l[3][3] = -10; 24 25 #pragma omp parallel shared (a, b, A) num_threads (5) 26 { 27 int i, j; 28 29 #pragma omp atomic 30 a += omp_get_num_threads (); 31 32 #pragma omp atomic 33 b += omp_get_num_threads (); 34 35 #pragma omp for private (j) 36 for (i = 0; i < 10; i++) 37 for (j = 0; j < 5; j++) 38 A[i][j].y.l[3][3] += 20; 39 40 } 41 42 for (i = 0; i < 10; i++) 43 for (j = 0; j < 5; j++) 44 if (A[i][j].y.l[3][3] != 10) 45 abort (); 46 47 if (a != 28) 48 abort (); 49 50 if (b != 28) 51 abort (); 52} 53 54main() 55{ 56 parallel (1, 2); 57 return 0; 58} 59