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