| SEM_WAIT(2) | System Calls Manual | SEM_WAIT(2) |
sem_trywait, sem_wait —
lock a semaphore
#include
<semaphore.h>
int
sem_trywait(sem_t
*sem);
int
sem_wait(sem_t
*sem);
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.
sem_wait() and
sem_trywait() succeed unless:
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.
sem_wait() and
sem_trywait() are specified in the POSIX Realtime
Extension (1003.1b-1993/1003.1i-1995).
| June 8, 2000 | Darwin |