#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) |