sem_init(3)sem_init(3)NAMEsem_init - Initializes an unnamed semaphore (P1003.1b)
SYNOPSIS
#include <semaphore.h>
int sem_init(
sem_t *sem,
int pshared,
unsigned int value );
LIBRARY
Realtime Library (librt)
PARAMETERS
Specifies a location to receive the descriptor of the initialized sema‐
phore. 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.
DESCRIPTION
The sem_init() function creates a new counting semaphore with a spe‐
cific 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 connec‐
tion 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_get‐
value() 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.
RETURN VALUES
On successful completion, the function returns the value 0 (zero); oth‐
erwise, the function returns the value -1 and sets errno to indicate
the error.
ERRORS
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.
SEE ALSO
Functions: sem_destroy(3), sem_post(3), sem_trywait(3), sem_wait(3)
Guide to Realtime Programming
sem_init(3)