xref: /llvm-project/lldb/packages/Python/lldbsuite/test/make/pseudo_barrier.h (revision 85d6edb26577a75940c9d691e6a178726cdb066b)
101a28ca7SPavel Labath #include <atomic>
2*85d6edb2SJonas Devlieghere 
3*85d6edb2SJonas Devlieghere // Note that although hogging the CPU while waiting for a variable to change
4*85d6edb2SJonas Devlieghere // would be terrible in production code, it's great for testing since it avoids
5*85d6edb2SJonas Devlieghere // a lot of messy context switching to get multiple threads synchronized.
601a28ca7SPavel Labath 
701a28ca7SPavel Labath typedef std::atomic<int> pseudo_barrier_t;
801a28ca7SPavel Labath 
9*85d6edb2SJonas Devlieghere #define pseudo_barrier_wait(barrier)        \
10*85d6edb2SJonas Devlieghere     do                                      \
11*85d6edb2SJonas Devlieghere     {                                       \
12*85d6edb2SJonas Devlieghere         --(barrier);                        \
13*85d6edb2SJonas Devlieghere         while ((barrier).load() > 0)        \
14*85d6edb2SJonas Devlieghere             ;                               \
15*85d6edb2SJonas Devlieghere     } while (0)
16e44f2eb3SJonas Devlieghere 
17*85d6edb2SJonas Devlieghere #define pseudo_barrier_init(barrier, count) \
18*85d6edb2SJonas Devlieghere     do                                      \
19*85d6edb2SJonas Devlieghere     {                                       \
20*85d6edb2SJonas Devlieghere         (barrier) = (count);                \
21*85d6edb2SJonas Devlieghere     } while (0)
22