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.
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 Exten-
sion (1003.1b-1993/1003.1i-1995).
Darwin June 8, 2000 Darwin
Mac OS X 10.9.1 - Generated Mon Jan 6 13:32:42 CST 2014
