#ifdef __APPLE__ #include #include typedef dispatch_semaphore_t fuse_native_semaphore_t; static int fuse_native_semaphore_init (dispatch_semaphore_t *sem) { *sem = dispatch_semaphore_create(0); return *sem == NULL ? -1 : 0; } static void fuse_native_semaphore_wait (dispatch_semaphore_t *sem) { dispatch_semaphore_wait(*sem, DISPATCH_TIME_FOREVER); } static void fuse_native_semaphore_signal (dispatch_semaphore_t *sem) { dispatch_semaphore_signal(*sem); } #else #include typedef sem_t fuse_native_semaphore_t; static int fuse_native_semaphore_init (sem_t *sem) { return sem_init(sem, 0, 0); } static void fuse_native_semaphore_wait (sem_t *sem) { sem_wait(sem); } static void fuse_native_semaphore_signal (sem_t *sem) { sem_post(sem); } #endif