manpagez: man (manual) pages & more
man sem_trywait(2)
Home | html | info | man
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. 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 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 Exten-
     sion (1003.1b-1993/1003.1i-1995).

Darwin                           June 8, 2000                           Darwin

Mac OS X 10.9.1 - Generated Mon Jan 6 13:32:42 CST 2014