00001
00002
00003
00004
00005 extern void abort (void);
00006
00007 int err;
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 #pragma omp parallel
00026 {
00027 int array[40];
00028 int i;
00029 for (i = 0; i < sizeof array / sizeof array[0]; i++)
00030 array[i] = 0x55555555;
00031
00032 #pragma omp for schedule (dynamic)
00033 for (i = 0; i < 50; i++)
00034 foo (array);
00035 }
00036 if (err)
00037 abort ();
00038 return 0;
00039 }