1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include <semaphore.h> #include <limits.h> #include <errno.h> int sem_init(sem_t *sem, int pshared, unsigned value) { if (value > SEM_VALUE_MAX) { errno = EINVAL; return -1; } sem->__val[0] = value; sem->__val[1] = 0; sem->__val[2] = pshared ? 0 : 128; return 0; }