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 |