# pthread_rwlock_timedwrlock

## 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_timedwrlock — lock a read-write lock for writing
    


## SYNOPSIS



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


## DESCRIPTION



           The _pthread_rwlock_timedwrlock_() function shall apply a write lock
           to the read-write lock referenced by _rwlock_ as in the
           _pthread_rwlock_wrlock_() 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_timedwrlock_(), 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 the read-write lock. The results are undefined if this
           function is called with an uninitialized read-write lock.
    


## RETURN VALUE



           The _pthread_rwlock_timedwrlock_() function shall return zero if the
           lock for writing 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_timedwrlock_() function shall fail if:
    
           **ETIMEDOUT**
                  The lock could not be acquired before the specified timeout
                  expired.
    
           The _pthread_rwlock_timedwrlock_() function may fail if:
    
           **EDEADLK**
                  A deadlock condition was detected or the calling thread
                  already holds the _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_timedwrlock_() 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.
    


* * *