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.
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 pre-empted preempted
empted by another thread (of medium priority), a priority inversion has occured, and the higher-prior-ity higher-priority
ity 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).
Darwin June 8, 2000 Darwin
|