1 #include <errno.h> 2 #include <limits.h> 3 #include <semaphore.h> 4 #include <stdatomic.h> 5 sem_init(sem_t * sem,int pshared,unsigned value)6int sem_init(sem_t* sem, int pshared, unsigned value) { 7 if (pshared) { 8 errno = ENOSYS; 9 return -1; 10 } 11 if (value > SEM_VALUE_MAX) { 12 errno = EINVAL; 13 return -1; 14 } 15 atomic_store(&sem->_s_value, value); 16 atomic_store(&sem->_s_waiters, 0); 17 return 0; 18 } 19