Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

sem_wait(3) [netbsd man page]

SEM_WAIT(3)						   BSD Library Functions Manual 					       SEM_WAIT(3)

sem_wait, sem_trywait -- decrement (lock) a semaphore LIBRARY
POSIX Real-time Library (librt, -lrt) 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
The sem_wait() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indi- cate the error. ERRORS
sem_wait() and sem_trywait() will fail if: [EINVAL] sem points to an invalid semaphore. Additionally, sem_trywait() will fail if: [EAGAIN] The semaphore value was zero, and thus could not be decremented. SEE ALSO
sem_post(3) STANDARDS
sem_wait() and sem_trywait() conform to ISO/IEC 9945-1:1996 (``POSIX.1''). BSD
January 22, 2003 BSD

Check Out this Related Man Page

SEM_WAIT(2)						      BSD System Calls Manual						       SEM_WAIT(2)

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
Man Page

3 More Discussions You Might Find Interesting

1. Programming

sem_wait, sem_post confusion?

Hi friends, I have written this small program using the concept of semaphores. I am a bit confused, hope u can help me with it. The idea is that 1. Two threads are created 2. First will be displaying 0(zero) on the screen 3. Second will be displaing 1(one) on the screen 4. This process... (2 Replies)
Discussion started by: gabam
2 Replies

2. Programming

Undefined: sem_init, sem_post, sem_wait

Hi friends, I am using semaphores in my program, but when I compile the program, it gives the following error $ gcc sem.c -o sem -lpthread Undefined first referenced symbol in file sem_init ... (1 Reply)
Discussion started by: gabam
1 Replies

3. Homework & Coursework Questions

Semaphores sem_wait sem_post problem

hallo! if there are many processes running and I initialize the semaphore like this: my_sem = sem_open(SEM_NAME, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, 10); (the last argument is 10) and then i use sem_wait(my_sem); sleep(5); sem_post; Will 10 processes be able to access the... (1 Reply)
Discussion started by: whatevernever
1 Replies