1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#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)
|