mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 13:00:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.2 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;
 | |
|     }
 | |
| }
 | |
| 
 | |
| #endif // __APPLE_
 |