[Previous] [Contents] [Next]

pthread_rwlock_timedwrlock()

Lock a read-write lock for writing

Synopsis:

#include <pthread.h>
#include <time.h>

int pthread_rwlock_timedwrlock( 
                   pthread_rwlock_t * rwlock,
                   const struct timespec * abs_timeout );

Library:

libc

Description:

The pthread_rwlock_timedwrlock() function applies a write lock to the read-write lock referenced by rwlock as in the pthread_rwlock_rdlock() function. However, if the lock can't be acquired without waiting for other threads to unlock the lock, this wait shall be 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 exceed 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 it isn't supported, the timeout is based on the system clock as returned by the time() function. The resolution of the timeout is the resolution of the clock on which it's based. The timespec data type is defined as a structure in the <time.h> header.

If the read-write lock can be locked immediately, the validity of the abs_timeout parameter isn't checked, and the function won't fail with a timeout.

If a signal that causes a signal handler to be executed is delivered to a thread blocked on a read-write lock via a call to pthread_rwlock_timedwrlock(), upon return from the signal handler the thread shall resume waiting for the lock as if it wasn't interrupted.

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.

Returns:

Zero if the lock for writing on the read-write lock object referenced by rwlock is acquired, or an error number to indicate the error.

Errors:

EAGAIN
Couldn't acquire read lock because the maximum number of read locks for lock would be exceeded.
EDEADLK
The calling thread already holds the rwlock.
EINVAL
The value specified by rwlock doesn't 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,000 million.
ETIMEDOUT
The lock couldn't be acquired before the specified timeout expired.

Classification:

POSIX 1003.1j

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

See also:

pthread_rwlock_destroy(), pthread_rwlock_init(), pthread_rwlock_timedrwlock(), pthread_rwlock_trywrlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock()


[Previous] [Contents] [Next]