# pthread_rwlock_timedrdlock

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           pthread_rwlock_timedrdlock — lock a read-write lock for reading
    


## SYNOPSIS



           #include <pthread.h>
           #include <time.h>
    
           int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict _rwlock_ ,
               const struct timespec *restrict _abstime_);
    


## DESCRIPTION



           The _pthread_rwlock_timedrdlock_() function shall apply a read lock
           to the read-write lock referenced by _rwlock_ as in the
           _pthread_rwlock_rdlock_() function. However, if the lock cannot be
           acquired without waiting for other threads to unlock the lock,
           this wait shall be terminated when the specified timeout expires.
           The timeout shall expire when the absolute time specified by
           _abstime_ passes, as measured by the clock on which timeouts are
           based (that is, when the value of that clock equals or exceeds
           _abstime_), or if the absolute time specified by _abstime_ has already
           been passed at the time of the call.
    
           The timeout shall be based on the CLOCK_REALTIME clock.  The
           resolution of the timeout shall be the resolution of the
           CLOCK_REALTIME clock. The **timespec** data type is defined in the
           _< time.h>_ header. Under no circumstances shall the function fail
           with a timeout if the lock can be acquired immediately. The
           validity of the _abstime_ parameter need not be checked if the lock
           can be immediately acquired.
    
           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_timedrdlock_(), upon return from the signal handler
           the thread shall resume waiting for the lock as if it was not
           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.
    


## RETURN VALUE



           The _pthread_rwlock_timedrdlock_() function shall return zero if the
           lock for reading on the read-write lock object referenced by
           _rwlock_ is acquired. Otherwise, an error number shall be returned
           to indicate the error.
    


## ERRORS



           The _pthread_rwlock_timedrdlock_() function shall 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 lock would be exceeded.
    
           **EDEADLK**
                  A deadlock condition was detected or the calling thread
                  already holds a write lock on _rwlock_.
    
           **EINVAL** The _abstime_ nanosecond value is less than zero or greater
                  than or equal to 1000 million.
    
           This function shall not return an error code of **[EINTR]**.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           Applications using this function may be subject to priority
           inversion, as discussed in the Base Definitions volume of
           POSIX.1‐2017, _Section 3.291_ , _Priority Inversion_.
    


## RATIONALE



           If an implementation detects that the value specified by the
           _rwlock_ argument to _pthread_rwlock_timedrdlock_() does not refer to
           an initialized read-write lock object, it is recommended that the
           function should fail and report an **[EINVAL]** error.
    


## FUTURE DIRECTIONS



           None.
    


* * *