Reference

sem_wait(2)

lock a semaphore

NAME

sem_trywait, sem_wait – lock a semaphore

SYNOPSIS

#include <semaphore.h>

int

sem_trywait(sem_t *sem);

int

sem_wait(sem_t *sem);

DESCRIPTION

The semaphore referenced by sem is locked. When calling sem_wait(), if the semaphore's value is zero, the calling thread will block until the lock is acquired or until the call is interrupted by a signal. Alternatively, the sem_trywait() function will fail if the semaphore is already locked, rather than blocking on the semaphore.

If successful (the lock was acquired), sem_wait() and sem_trywait() will return 0. Otherwise, -1 is returned and errno is set, and the state of the semaphore is unchanged.

ERRORS

sem_wait() and sem_trywait() succeed unless:

[EAGAIN]

The semaphore is already locked.

[EDEADLK]

A deadlock was detected.

[EINTR]

The call was interrupted by a signal.

[EINVAL]

sem is not a valid semaphore descriptor.

NOTES

Applications may encounter a priority inversion while using semaphores. When a thread is waiting on a semaphore which is about to be posted by a lower-priority thread and the lower-priority thread is preempted by another thread (of medium priority), a priority inversion has occured, and the higher-priority thread will be blocked for an unlimited time period. Programmers using the realtime functionality of the system should take care to avoid priority inversions.

SEE ALSO

sem_open(2), sem_post(2), semctl(2), semget(2), semop(2)

HISTORY

sem_wait() and sem_trywait() are specified in the POSIX Realtime Extension (1003.1b-1993/1003.1i-1995).

History