[Previous] [Contents] [Next]

sem_timedwait()

Lock a semaphore

Synopsis:

#include <semaphore.h>
#include <time.h>

int sem_timedwait( 
        sem_t * sem,
        const struct timespec * abs_timeout );

Library:

libc

Description:

The sem_timedwait() function locks the semaphore referenced by sem as in the sem_wait() function. However, if the semaphore can't be locked without waiting for another process or thread to unlock the semaphore by performing a sem_post() function, the wait is terminated when the specified timeout expires.

The timeout expires when the absolute time specified by abs_timeout passes, as measured by the clock on which timeouts are based (i.e. when the value of that clock equals or exceeds abs_timeout), or if the absolute time specified by abs_timeout has already been passed at the time of the call. If the Timers option is supported, the timeout is based on the CLOCK_REALTIME clock; if the Timers option isn't supported, the timeout is based on the system clock as returned by the time() function.

Returns:

0
The calling process successfully performed the semaphore lock operation on the semaphore designated by sem.
-1
The call was unsuccessful (errno is set). The state of the semaphore is unchanged.

Errors:

EDEADLK
A deadlock condition was detected.
EINTR
A signal interrupted this function.
EINVAL
Invalid semaphore sem or the thread would have blocked, and the abs_timeout parameter specified a nanoseconds field value less than zero or greater than or equal to 1000 million.
ETIMEDOUT
The semaphore couldn't be locked before the specified timeout expired.

Classification:

POSIX 1003.1d (draft)

Safety:
Cancellation point Yes
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

errno, sem_post(), sem_trywait(), sem_wait(), time()


[Previous] [Contents] [Next]