00001
00002
00003 int x, *p = &x;
00004 extern void abort (void);
00005 void
00006 f1 (int *q)
00007 {
00008 *q = 1;
00009 #pragma omp flush
00010
00011
00012
00013 }
00014
00015 void
00016 f2 (int *q)
00017 {
00018 #pragma omp barrier
00019 *q = 2;
00020 #pragma omp barrier
00021
00022
00023
00024
00025 }
00026
00027 int
00028 g (int n)
00029 {
00030 int i = 1, j, sum = 0;
00031 *p = 1;
00032 #pragma omp parallel reduction(+: sum) num_threads(2)
00033 {
00034 f1 (&j);
00035
00036
00037
00038 sum += j;
00039 f2 (&j);
00040
00041
00042
00043 sum += i + j + *p + n;
00044 }
00045 return sum;
00046 }
00047
00048 int
00049 main ()
00050 {
00051 int result = g (10);
00052 if (result != 30)
00053 abort ();
00054 return 0;
00055 }