| #include <errno.h> | |
| #include <limits.h> | |
| #include <semaphore.h> | |
| #include <stdatomic.h> | |
| int sem_init(sem_t* sem, int pshared, unsigned value) { | |
| if (pshared) { | |
| errno = ENOSYS; | |
| return -1; | |
| } | |
| if (value > SEM_VALUE_MAX) { | |
| errno = EINVAL; | |
| return -1; | |
| } | |
| atomic_store(&sem->_s_value, value); | |
| atomic_store(&sem->_s_waiters, 0); | |
| return 0; | |
| } |