sem_trywait(3) [freebsd man page]
SEM_WAIT(3) BSD Library Functions Manual SEM_WAIT(3) NAME
sem_wait, sem_trywait -- decrement (lock) a semaphore LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <semaphore.h> int sem_wait(sem_t *sem); int sem_trywait(sem_t *sem); DESCRIPTION
The sem_wait() function decrements (locks) the semaphore pointed to by sem, but blocks if the value of sem is zero, until the value is non- zero and the value can be decremented. The sem_trywait() function decrements (locks) the semaphore pointed to by sem only if the value is non-zero. Otherwise, the semaphore is not decremented and an error is returned. RETURN VALUES
Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error. ERRORS
The sem_wait() and sem_trywait() functions will fail if: [EINVAL] The sem argument points to an invalid semaphore. Additionally, sem_wait() will fail if: [EINTR] A signal interrupted this function. Additionally, sem_trywait() will fail if: [EAGAIN] The semaphore value was zero, and thus could not be decremented. SEE ALSO
sem_getvalue(3), sem_post(3), sem_timedwait(3) STANDARDS
The sem_wait() and sem_trywait() functions conform to ISO/IEC 9945-1:1996 (``POSIX.1''). BSD
April 16, 2013 BSD
Check Out this Related Man Page
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 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. 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