pthread_rwlock_timedrdlock —
acquire a read-write lock for reading or give up after a
specified period
POSIX Threads Library (libpthread,
-lpthread)
#include
<pthread.h>
int
pthread_rwlock_timedrdlock(pthread_rwlock_t
*restrict rwlock, const
struct timespec *restrict abs_timeout);
This function acquires a read lock on the read-write lock
rwlock. However, if the lock cannot be acquired
without waiting for another thread to unlock the lock, this wait shall be
terminated when abs_timeout expires.
A thread may hold multiple concurrent read locks. The
pthread_rwlock_unlock(3)
function must be called once for each lock acquired.
If the thread should be
interrupted by a signal, the
pthread_rwlock_timedrdlock()
function will be automatically restarted after the thread returns from the
signal handler.
The calling thread may deadlock if at the time the call is made it
holds a write lock on rwlock. The results are
undefined if this function is called with an uninitialized read-write
lock.
To prevent writer starvation, writers are favored over
readers.
If successful, the
pthread_rwlock_timedrdlock() function will return
zero. Otherwise, an error number will be returned to indicate the error.
This function shall not return an error code of
EINTR.
The pthread_rwlock_timedrdlock() function
will fail if:
- [
ETIMEDOUT]
- The lock could not be acquired before the specified timeout expired.
The pthread_rwlock_timedrdlock() function
may fail if:
- [
EAGAIN]
- The read lock could not be acquired because the maximum number of read
locks for rwlock would be exceeded.
- [
EDEADLK]
- The calling thread already holds a write lock on
rwlock.
- [
EINVAL]
- The value specified by rwlock does not refer to an
initialized read-write lock object, or the
abs_timeout nanosecond value is less than zero or
greater than or equal to 1 billion.
The pthread_rwlock_timedrdlock() function
is expected to conform to ISO/IEC 9945-1:1996
(“POSIX.1”).
The pthread_rwlock_timedrdlock() function
first appeared in FreeBSD 5.2.