SEM_WAIT(2) BSD System Calls Manual SEM_WAIT(2)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. Alterna‐
tively, 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.
ERRORSsem_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 ALSOsem_open(2), sem_post(2), semctl(2), semget(2), semop(2)HISTORYsem_wait() and sem_trywait() are specified in the POSIX Realtime Exten‐
sion (1003.1b-1993/1003.1i-1995).
Darwin June 8, 2000 Darwin