#ifndef __SEMAPHORE_H #define __SEMAPHORE_H #define SEM_VALUE_MAX 64 #if defined(c_plusplus) || defined(__cplusplus) extern "C" { #endif /* c_plusplus || __cplusplus */ /* MacOS X doesn't implement unnamed POSIX semaphores, event though the libc defines them! */ #if (defined(__MACH__) && defined(__APPLE__)) #include #include #include #define sem_t semaphore_t #define sem_init(SEM,UNUSED,VALUE) semaphore_create(current_task(), (SEM), SYNC_POLICY_FIFO, (VALUE)) #define sem_destroy(SEM) semaphore_destroy(current_task(), *(SEM)) #define sem_wait(SEM) semaphore_wait(*(SEM)) #define sem_post(SEM) semaphore_signal(*(SEM)) #else typedef struct psem { pthread_mutex_t sem_lock; int sem_value; int sem_waiting; } sem_t; int sem_init(sem_t* sem, int pshared, unsigned int value); int sem_destroy(sem_t* sem); sem_t sem_open(const char* name, int oflag, ...); int sem_close(sem_t* sem); int sem_unlink(const char* name); int sem_wait(sem_t* sem); int sem_trywait(sem_t* sem); int sem_post(sem_t* sem); int sem_getvalue(sem_t* sem, int* sval); #endif #if defined(c_plusplus) || defined(__cplusplus) }; #endif /* c_plusplus || __cplusplus */ #endif /* __SEMAPHORE_H */