NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES
#include <semaphore.h>int sem_init(sem_t * sem, int pshared, unsigned int value);
The sem_init function initializes the counting semaphore referenced by sem , setting the initial counter value to value . The pshared argument must be zero, as inter-process sharing is not defined in the CHORUS/POSIX Micro Realtime Profile.
The sem_destroy function deletes the semaphore referenced by sem .
The sem_wait function "locks" the semaphore by decrementing the counter value. If the result is negative, the caller is blocked until either the counter is incremented by a subsequent sem_post , or the calling thread is aborted (see threadAbort (2K)). (NOTE: thread abort is not directly supported by the CHORUS/POSIX Micro Realtime Profile (see mrtp (3POSIX)).) The sem_trywait function "locks" the semaphore only if it can do so without blocking. It atomically examines the counter value, decrements it only if it is currently positive, and returns immediately. If sem_trywait fails, it returns an error code of EAGAIN; in this case it has no effect on the counter or on any threads blocked on the semaphore.
The sem_post function "unlocks" the semaphore by incrementing the counter value. If the result is negative or zero, a thread that is blocked behind the semaphore is awakened and allowed to return successfully from its call to sem_wait . The thread that has been blocked for the longest time will be selected to be awakened.
The sem_getvalue function stores in the location referenced by sval the instantaneous counter value of the semaphore sem . It has no effect on the state of the semaphore. In some cases, recent counter increments may not be reflected, and hence the stored value may be lower than the actual semaphore counter (it will never be higher). Furthermore, concurrent operations may cause the actual semaphore counter to have changed by the time the caller obtains the stored value.
If the counter value stored by sem_getvalue indicates that the semaphore is unavailable (zero or negative), the absolute value of the counter is the number of threads blocked behind the semaphore.
Upon successful completion, sem_init , sem_wait , sem_trywait , sem_post , and sem_getvalue return zero. In case of error a value of -1 is returned and errno is set to indicate the error condition.
The sem_destroy function always returns zero.
The pshared argument is non-zero, or the value argument is greater than SEM_VALUE_MAX ( sem_init only). A pointer argument contains an address outside the current actor's address space. The semaphore addressed by sem was not initialized or has been corrupted ( sem_wait , sem_trywait , sem_post ).
sem_wait or sem_trywait was interrupted by an abort.
sem_trywait was unable to lock the semaphore.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES