sem_init - Initializes an unnamed semaphore (P1003.1b)
#include <semaphore.h>
int sem_init(
sem_t *sem,
int pshared,
unsigned int value );
Realtime Library (librt)
Specifies a location to receive the descriptor of the initialized
semaphore. Specifies a value indicating whether
the semaphore should be sharable between the creating process
and its descendants (non-zero value) or not (zero).
Specifies the initial value to be given to the semaphore.
The sem_init() function creates a new counting semaphore
with a specific value. A semaphore is used to limit access
to a critical resource. When a process requires access to
the resource without interference from other processes, it
attempts to establish a connection with the associated
semaphore. If the semaphore value is greater than zero,
the connection is established and the semaphore value is
decremented by one. If the semaphore value is less than or
equal to zero, the process attempting to access the
resource is blocked and must wait for another process to
release the semaphore and increment the semaphore value.
The sem_init() function establishes a connection between
an unnamed semaphore and a process; the sem_wait() and
sem_trywait() functions lock the semaphore; and the
sem_post() function unlocks the semaphore. Use the
sem_destroy() function to deallocate system resources
allocated to the process for use with the semaphore. You
can use the sem_getvalue() function to obtain the value of
a semaphore.
A semaphore created by a call to the sem_init() function
remains valid until the semaphore is removed by a call to
the sem_destroy() function.
On successful completion, the function returns the value 0
(zero); otherwise, the function returns the value -1 and
sets errno to indicate the error.
The sem_init function fails under the following conditions:
The value argument exceeds {SEM_VALUE_MAX}. A
resource required to initialize the semaphore has been
exhausted. The limit on semaphores ({SEM_NSEMS_MAX}) has
been reached. The process lacks the appropriate privilege
to initialize the semaphore.
Functions: sem_destroy(3), sem_post(3), sem_trywait(3),
sem_wait(3)
Guide to Realtime Programming
sem_init(3)
[ Back ] |