SEM_WAIT(2) BSD System Calls Manual SEM_WAIT(2)
sem_wait, sem_trywait -- lock a semaphore
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 aquired 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 aquired), sem_wait() and sem_trywait() will
return 0. Otherwise, -1 is returned and errno is set, and the state of
the semaphore is unchanged.
sem_wait() and sem_trywait() succeed unless:
[EAGAIN] The semaphore is already locked.
[EINVAL] sem is not a valid semaphore descriptor.
[EDEADLK] A deadlock was detected.
[EINTR] The call was interrupted by a signal.
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.
semctl(2), semget(2), semop(2), sem_open(2), sem_post(2)
sem_wait() and sem_trywait() are specified in the POSIX Realtime Exten-
Darwin June 8, 2000 Darwin