pthread_mutex_timedlock
—
lock a mutex without blocking indefinitely
POSIX Threads Library (libpthread, -lpthread)
#include <pthread.h>
#include <time.h>
int
pthread_mutex_timedlock
(pthread_mutex_t
*restrict mutex, const
struct timespec *restrict abs_timeout);
The pthread_mutex_timedlock
() function will lock
mutex. If it is already locked the calling thread will
block until the mutex becomes available or the timeout, specified by
abs_timeout, expires. The time of the timeout is an absolute time and is not
relative to the current time.
If successful, pthread_mutex_timedlock
() will return
zero, otherwise an error number will be returned to indicate the error.
The pthread_mutex_timedlock
() function will fail if:
- [Er ENOTRECOVERABLE]
- The mutex was created with the protocol attribute
having the value PTHREAD_PRIO_PROTECT and the calling thread's priority is
higher than the mutex's current priority ceiling.
- [
EINVAL
]
- The process or thread would have blocked, and
abs_timeout specified a nanosecond value less than
zero or greater than or equal to 1 billion.
- [
EINVAL
]
- The mutex parameter is invalid.
- [
ETIMEDOUT
]
- The mutex could not be locked before the timeout
expired.
- [
EAGAIN
]
- The mutex could not be acquired because the maximum
number of recursive locks for the mutex has been
exceeded.
- [
EDEADLK
]
- The current thread already owns the mutex.
- [
EOWNERDEAD
]
- The argument mutex points to a robust mutex and the
process containing the previous owning thread terminated while holding the
mutex lock. The lock was granted to the caller and it is up to the new
owner to make the state consistent.
- [
ENOTRECOVERABLE
]
- The state protected by the mutex is not
recoverable.
The pthread_mutex_timedlock
() function is expected to
conform to ISO/IEC 9945-1:1996
(“POSIX.1”).