forked from OSchip/llvm-project
21 lines
787 B
C
21 lines
787 B
C
|
#include <atomic>
|
||
|
|
||
|
// Note that although hogging the CPU while waiting for a variable to change
|
||
|
// would be terrible in production code, it's great for testing since it
|
||
|
// avoids a lot of messy context switching to get multiple threads synchronized.
|
||
|
|
||
|
typedef std::atomic<int> pseudo_barrier_t;
|
||
|
#define pseudo_barrier_wait(barrier) \
|
||
|
do \
|
||
|
{ \
|
||
|
--(barrier); \
|
||
|
while ((barrier).load() > 0) \
|
||
|
; \
|
||
|
} while (0)
|
||
|
|
||
|
#define pseudo_barrier_init(barrier, count) \
|
||
|
do \
|
||
|
{ \
|
||
|
(barrier) = (count); \
|
||
|
} while (0)
|