sem_wait2
Lock a semaphore
Usage
#include <semaphore.h>
int
sem_trywait(sem_t *sem);
int
sem_wait(sem_t *sem);
Overview
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.
Releases
161 releases since Mac OS X 10.0; the text changed 2 times.