1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- extern
- #ifdef __cplusplus
- "C"
- #endif
- void abort (void);
- void
- foo (int i, char *j)
- {
- #pragma omp atomic
- j[i]++;
- #pragma omp ordered threads
- {
- int t;
- #pragma omp atomic read
- t = j[i];
- if (t != 3)
- abort ();
- if (i > 1)
- {
- #pragma omp atomic read
- t = j[i - 1];
- if (t == 2)
- abort ();
- }
- if (i < 127)
- {
- #pragma omp atomic read
- t = j[i + 1];
- if (t == 4)
- abort ();
- }
- }
- #pragma omp atomic
- j[i]++;
- }
- int
- main ()
- {
- int i;
- char j[128];
- #pragma omp parallel
- {
- #pragma omp for
- for (i = 0; i < 128; i++)
- j[i] = 0;
- #pragma omp for ordered schedule(dynamic, 1)
- for (i = 0; i < 128; i++)
- {
- #pragma omp atomic
- j[i]++;
- #pragma omp ordered threads
- {
- int t;
- #pragma omp atomic read
- t = j[i];
- if (t != 1)
- abort ();
- if (i > 1)
- {
- #pragma omp atomic read
- t = j[i - 1];
- if (t == 0)
- abort ();
- }
- if (i < 127)
- {
- #pragma omp atomic read
- t = j[i + 1];
- if (t == 2)
- abort ();
- }
- }
- #pragma omp atomic
- j[i]++;
- }
- #pragma omp for ordered schedule(static, 1)
- for (i = 0; i < 128; i++)
- foo (i, j);
- }
- return 0;
- }
|