#include <omp.h> | |
#include <stdlib.h> | |
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; | |
} |