#include #include int main (void) { int i = 0, j = 0, k = 0, l = 0; #pragma omp parallel num_threads(4) reduction(-:i) reduction(|:k) \ reduction(^:l) { if (i != 0 || k != 0 || l != 0) #pragma omp atomic j |= 1; if (omp_get_num_threads () != 4) #pragma omp atomic j |= 2; i = omp_get_thread_num (); k = 1 << (2 * i); l = 0xea << (3 * i); } if (j & 1) abort (); if ((j & 2) == 0) { if (i != (0 + 1 + 2 + 3)) abort (); if (k != 0x55) abort (); if (l != 0x1e93a) abort (); } return 0; }