mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	
		
			
	
	
		
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			77 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  |  * APPLE Compatibility | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifdef __APPLE__
 | ||
|  | 
 | ||
|  | #include <pthread.h>
 | ||
|  | #include <errno.h>
 | ||
|  | 
 | ||
|  | #include "apple_compat.h"
 | ||
|  | 
 | ||
|  | int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count) | ||
|  | { | ||
|  |     if(count == 0) | ||
|  |     { | ||
|  |         errno = EINVAL; | ||
|  |         return -1; | ||
|  |     } | ||
|  |     if(pthread_mutex_init(&barrier->mutex, 0) < 0) | ||
|  |     { | ||
|  |         return -1; | ||
|  |     } | ||
|  |     if(pthread_cond_init(&barrier->cond, 0) < 0) | ||
|  |     { | ||
|  |         pthread_mutex_destroy(&barrier->mutex); | ||
|  |         return -1; | ||
|  |     } | ||
|  |     barrier->tripCount = count; | ||
|  |     barrier->count = 0; | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | int pthread_barrier_destroy(pthread_barrier_t *barrier) | ||
|  | { | ||
|  |     pthread_cond_destroy(&barrier->cond); | ||
|  |     pthread_mutex_destroy(&barrier->mutex); | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | int pthread_barrier_wait(pthread_barrier_t *barrier) | ||
|  | { | ||
|  |     pthread_mutex_lock(&barrier->mutex); | ||
|  |     ++(barrier->count); | ||
|  |     if(barrier->count >= barrier->tripCount) | ||
|  |     { | ||
|  |         barrier->count = 0; | ||
|  |         pthread_cond_broadcast(&barrier->cond); | ||
|  |         pthread_mutex_unlock(&barrier->mutex); | ||
|  |         return 1; | ||
|  |     } | ||
|  |     else | ||
|  |     { | ||
|  |         pthread_cond_wait(&barrier->cond, &(barrier->mutex)); | ||
|  |         pthread_mutex_unlock(&barrier->mutex); | ||
|  |         return 0; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * Missing POSIX RealTime/Monotonic Clock | ||
|  |  */ | ||
|  | #include <mach/mach_time.h>
 | ||
|  | 
 | ||
|  | int clock_gettime(int clk_id, struct timespec *t) { | ||
|  |     mach_timebase_info_data_t timebase; | ||
|  |     mach_timebase_info(&timebase); | ||
|  |     uint64_t time; | ||
|  |     time = mach_absolute_time(); | ||
|  |     double nseconds = ((double)time * (double)timebase.numer)/((double)timebase.denom); | ||
|  |     double seconds = ((double)time * (double)timebase.numer)/((double)timebase.denom * 1e9); | ||
|  |     t->tv_sec = seconds; | ||
|  |     t->tv_nsec = nseconds; | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | #endif // APPLE Compatibility
 |