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
Check Out this Related 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
Man Page
5 More Discussions You Might Find Interesting
1. Post Here to Contact Site Administrators and Moderators
I think we need need to discuss the homework rules a little...
In this thread, Neo is concerned that I may have helped someone with homework. I actually worried a little about that as I posted. But I decided that if a student was to turn in my script as his work, the instructor would probably... (11 Replies)
Hi there,
Could someone please confirm which POSIX semaphore routines should be used for a multiprocess (and not multithreaded) environment?
sys/sem.h definitely works. but the routines, semget, semctl, semop are pretty unwieldy. So, I am looking for an easier way out.
From the man pages... (2 Replies)
I'm running one multithreaded application, in that one of my thread
is waiting infinitely in a semphore. Is there a way to determine, in
which semaphore the particular thread is waiting and which thread(s)
is holding the semaphore. (5 Replies)
we developed a set of system V semphore interface for our application, in general, all of them work normal, seldom cause the deadlock. Here are some important sem_wait and sem_post interface, pls point some suggestion to fixed the deadlock problem:
int sem_wait_V(int id, struct sembuf *sem_pv)... (1 Reply)
Can Someone help me what does the following error mean?
ERR: 17-Oct-11 15:07:44: File etlDataLoad.c Line 1069: 895, A fatal error has occured. Posting semaphore information
ERR: 17-Oct-11 15:07:44: File etlDataLoad.c Line 1174: 899, Local load partition 0 exited with a failure status of 256... (1 Reply)