00001
00002
00003
00004
00005 extern void abort (void);
00006
00007 int err, a[40];
00008
00009 void __attribute__((noinline))
00010 foo (int *array)
00011 {
00012 #pragma omp task
00013 {
00014 int j;
00015 for (j = 0; j < sizeof array / sizeof array[0]; j++)
00016 if (array[j] != 0x55555555)
00017 #pragma omp atomic
00018 err++;
00019 }
00020 }
00021
00022 int
00023 main (void)
00024 {
00025 int k;
00026 for (k = 0; k < sizeof a / sizeof a[0]; k++)
00027 a[k] = 0x55555555;
00028
00029 #pragma omp parallel
00030 {
00031 int i;
00032
00033 #pragma omp for schedule (dynamic)
00034 for (i = 0; i < 50; i++)
00035 foo (a);
00036 }
00037 if (err)
00038 abort ();
00039 return 0;
00040 }