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.

This manual page is associated with the Mac OS X developer tools. The software or headers described may not be present on your Mac OS X installation until you install the developer tools package. This package is available on your Mac OS X installation DVD, and the latest versions can be downloaded from developer.apple.com.

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.
     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 pre-empted preempted
     empted by another thread (of medium priority), a priority inversion has occured, and the higher-prior-ity higher-priority
     ity 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

Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.