sem_init - initialise an unnamed semaphore (REALTIME)
#include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value);
The sem_init() function is used to initialise the unnamed semaphore referred to by sem. The value of the initialised semaphore is value. Following a successful call to sem_init(), the semaphore may be used in subsequent calls to sem_wait(), sem_trywait(), sem_post(), and sem_destroy(). This semaphore remains usable until the semaphore is destroyed.
If the pshared argument has a non-zero value, then the semaphore is shared between processes; in this case, any process that can access the semaphore sem can use sem for performing sem_wait(), sem_trywait(), sem_post(), and sem_destroy() operations.
Only sem itself may be used for performing synchronisation. The result of referring to copies of sem in calls to sem_wait(), sem_trywait(), sem_post(), and sem_destroy(), is undefined.
If the pshared argument is zero, then the semaphore is shared between threads of the process; any thread in this process can use sem for performing sem_wait(), sem_trywait(), sem_post(), and sem_destroy() operations. The use of the semaphore by threads other than those created in the same process is undefined.
Attempting to initialise an already initialised semaphore results in undefined behaviour.
Upon successful completion, the function initialises the semaphore in sem. Otherwise, it returns -1 and sets errno to indicate the error.
The sem_init() function will fail if:
- The value argument exceeds SEM_VALUE_MAX.
- A resource required to initialise the semaphore has been exhausted, or the limit on semaphores (SEM_NSEMS_MAX) has been reached.
- The function sem_init() is not supported by this implementation.
- The process lacks the appropriate privileges to initialise the semaphore.
sem_destroy(), sem_post(), sem_trywait(), sem_wait(), <semaphore.h>.
Derived from the POSIX Realtime Extension (1003.1b-1993/1003.1i-1995)