[Previous]
[Contents]
[Next]

sem_init()

initialize a semaphore

Synopsis:

#include <semaphore.h>

int sem_init( sem_t *sem, 
              int pshared, 
              unsigned value );

Description:

The sem_init() function initializes the unnamed semaphore referred to by the sem argument. The initial counter value of this semaphore is specified by the value argument.

The initialized semaphore can be used in subsequent calls to sem_wait(), sem_trywait(), sem_post() and sem_destroy(). An initialized semaphore is valid until it is destroyed by the sem_destroy() function, or until the memory where the semaphore resides is released.

If the pshared argument is nonzero, then the semaphore can be shared between processes via shared memory. Any process can then use sem with the sem_wait(), sem_trywait(), sem_post() and sem_destroy() functions.

Returns:

If successful, the sem_init() function returns 0 and initializes the semaphore referred to by sem. Otherwise, it returns -1 and errno is set to indicate the error.

Errors:

EAGAIN
A resource required to initialize the semaphore has been exhausted.

The limit on semaphores (-e num-semaphores argument to Proc32) has been reached.

EINVAL
The value argument exceeds SEM_VALUE_MAX.
EPERM
The process lacks the appropriate privileges to initialize the semaphore.
ENOSPC
A resource required to initialize the semaphore has been exhausted.
ENOSYS
The sem_init() function isn't supported.

Examples:

/usr/demo/src/semaphores

Classification:

POSIX 1003.1b-1993

Safety:
Interrupt handler No
Signal handler Yes, but modifies errno
Thread Read the Caveats

Caveats:

Don't initialize the same semaphore from more than one thread. It's best to set up semaphores before starting any threads.

See also:

errno, sem_destroy(), sem_post(), sem_trywait(), sem_wait()


[Previous]
[Contents]
[Next]