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)6 int 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