Provided by: manpages-posix-dev_2013a-2_all bug

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_trywrlock,  pthread_rwlock_wrlock  —  lock  a  read-write  lock  object for
       writing

SYNOPSIS

       #include <pthread.h>

       int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
       int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);

DESCRIPTION

       The  pthread_rwlock_trywrlock()   function   shall   apply   a   write   lock   like   the
       pthread_rwlock_wrlock()  function,  with the exception that the function shall fail if any
       thread currently holds rwlock (for reading or writing).

       The pthread_rwlock_wrlock() function shall apply a  write  lock  to  the  read-write  lock
       referenced  by  rwlock.   The  calling  thread  acquires the write lock if no other thread
       (reader or writer) holds the read-write lock rwlock.  Otherwise, the  thread  shall  block
       until  it can acquire the lock. The calling thread may deadlock if at the time the call is
       made it holds the read-write lock (whether a read or write lock).

       Implementations may favor writers over readers to avoid writer starvation.

       Results are undefined if any of these functions are called  with  an  uninitialized  read-
       write lock.

       If  a  signal  is  delivered  to  a thread waiting for a read-write lock for writing, upon
       return from the signal handler the thread resumes waiting  for  the  read-write  lock  for
       writing as if it was not interrupted.

RETURN VALUE

       The  pthread_rwlock_trywrlock()  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.

       If successful, the pthread_rwlock_wrlock() function shall return zero; otherwise, an error
       number shall be returned to indicate the error.

ERRORS

       The pthread_rwlock_trywrlock() function shall fail if:

       EBUSY  The read-write lock could not be acquired for writing because it was already locked
              for reading or writing.

       The pthread_rwlock_wrlock() function may fail if:

       EDEADLK
              A deadlock condition was detected or the current thread already owns the read-write
              lock for writing or reading.

       These functions shall not return an error code of [EINTR].

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       Applications using these functions may be subject to priority inversion, as  discussed  in
       the Base Definitions volume of POSIX.1‐2008, Section 3.287, Priority Inversion.

RATIONALE

       If  an  implementation  detects  that  the  value  specified  by  the  rwlock  argument to
       pthread_rwlock_trywrlock() or pthread_rwlock_wrlock() 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.

SEE ALSO

       pthread_rwlock_destroy(), pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock(),
       pthread_rwlock_timedwrlock(), pthread_rwlock_unlock()

       The  Base  Definitions  volume of POSIX.1‐2008, Section 3.287, Priority Inversion, Section
       4.11, Memory Synchronization, <pthread.h>

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1,  2013  Edition,  Standard  for Information Technology -- Portable Operating System
       Interface (POSIX), The Open Group Base Specifications Issue 7, Copyright (C) 2013  by  the
       Institute  of  Electrical  and  Electronics  Engineers,  Inc and The Open Group.  (This is
       POSIX.1-2008 with the  2013  Technical  Corrigendum  1  applied.)  In  the  event  of  any
       discrepancy  between  this  version and the original IEEE and The Open Group Standard, the
       original IEEE and The Open Group Standard is the referee document. The  original  Standard
       can be obtained online at http://www.unix.org/online.html .

       Any  typographical  or  formatting errors that appear in this page are most likely to have
       been introduced during the conversion of the source files to man page  format.  To  report
       such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .