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