xref: /llvm-project/openmp/tools/multiplex/tests/ompt-signal.h (revision e9b8ed1fd7c561956b5b2b2e9c43de84a00b4018)
1 // These functions are used to provide a signal-wait mechanism to enforce
2 // expected scheduling for the test cases. Conditional variable (s) needs to be
3 // shared! Initialize to 0
4 #include <unistd.h>
5 
6 #define OMPT_SIGNAL(s) ompt_signal(&s)
7 // inline
ompt_signal(int * s)8 void ompt_signal(int *s) {
9 #pragma omp atomic
10   (*s)++;
11 }
12 
13 #define OMPT_WAIT(s, v) ompt_wait(&s, v)
14 // wait for s >= v
15 // inline
ompt_wait(int * s,int v)16 void ompt_wait(int *s, int v) {
17   int wait = 0;
18   do {
19     usleep(10);
20 #pragma omp atomic read
21     wait = (*s);
22   } while (wait < v);
23 }
24