| // These functions are used to provide a signal-wait mechanism to enforce | |
| // expected scheduling for the test cases. Conditional variable (s) needs to be | |
| // shared! Initialize to 0 | |
| #include <unistd.h> | |
| #define OMPT_SIGNAL(s) ompt_signal(&s) | |
| // inline | |
| void ompt_signal(int *s) { | |
| #pragma omp atomic | |
| (*s)++; | |
| } | |
| #define OMPT_WAIT(s, v) ompt_wait(&s, v) | |
| // wait for s >= v | |
| // inline | |
| void ompt_wait(int *s, int v) { | |
| int wait = 0; | |
| do { | |
| usleep(10); | |
| #pragma omp atomic read | |
| wait = (*s); | |
| } while (wait < v); | |
| } |