Documentation Archive Developer
Search
ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages

 

This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).



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, Alternatively,
     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 Extension
     sion (1003.1b-1993/1003.1i-1995).

Darwin                           June 8, 2000                           Darwin