Go to main content

man pages section 3: Basic Library Functions

Exit Print View

Updated: Thursday, June 13, 2019
 
 

sem_init(3C)

Name

sem_init - initialize an unnamed semaphore

Synopsis

#include <semaphore.h>

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

Description

The sem_init() function is used to initialize the unnamed semaphore referred to by sem. The value of the initialized semaphore is value. Following a successful call to sem_init(), the semaphore may be used in subsequent calls to sem_wait(3C), sem_trywait(3C), sem_post(3C), and sem_destroy(3C). This semaphore remains usable until the semaphore is destroyed.

If the pshared argument has a non-zero value, then the semaphore is shared between processes; in this case, any process that can access the semaphore sem can use sem for performing sem_wait(3C), sem_trywait(3C), sem_post(3C), and sem_destroy(3C) operations.

Only sem itself may be used for performing synchronization. The result of referring to copies of sem in calls to sem_wait(3C), sem_trywait(3C), sem_post(3C), and sem_destroy(3C), is undefined.

If the pshared argument is zero, then the semaphore is shared between threads of the process; any thread in this process can use sem for performing sem_wait(3C), sem_trywait(3C), sem_post(3C), and sem_destroy(3C) operations. The use of the semaphore by threads other than those created in the same process is undefined.

Attempting to initialize an already initialized semaphore results in undefined behavior.

The sem_open(3C) function is used with named semaphores.

Return Values

Upon successful completion, the function initializes the semaphore in sem. Otherwise, it returns −1 and sets errno to indicate the error.

Errors

The sem_init() function will fail if:

EINVAL

The value argument exceeds SEM_VALUE_MAX.

ENOSPC

A resource required to initialize the semaphore has been exhausted, or the resources have reached the limit on semaphores (SEM_NSEMS_MAX).

ENOSYS

The sem_init() function is not supported by the system.

EPERM

The process lacks the appropriate privileges to initialize the semaphore.

Attributes

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Committed
MT-Level
MT-Safe
Standard

See Also

sem_destroy(3C), sem_open(3C), sem_post(3C), sem_wait(3C), attributes(7), standards(7)