bionic (3) pthread_rwlock_trywrlock.3posix.gz

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>

       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 .