NAME | SYNOPSIS | API RESTRICTIONS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES
$(OS_DIR)/lib/libc.a #include <semaphore.h>int sem_init(sem_t * sem, int pshared, unsigned int value);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
The sem_init() function initializes the counting semaphore referenced by sem , setting the initial counter value to value . The pshared argument must be zero.
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.
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 is 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.
On 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 | API RESTRICTIONS | DESCRIPTION | RETURN VALUE | ERRORS | ATTRIBUTES