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 shall acquire the write lock if no thread (reader or writer) holds the read-write lock rwlock. Otherwise, if another thread holds the read-write lock rwlock, the calling thread shall block until it can acquire the lock. If a deadlock condition occurs or the calling thread already owns the read-write lock for writing or reading, the call shall either deadlock or return [EDEADLK].
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].
EXAMPLES
None.
APPLICATION USAGE
Applications using these functions may be subject to priority inversion, as discussed in XBD V1_chap03(7).
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(3), pthread_rwlock_rdlock(3), pthread_rwlock_timedrdlock(3), pthread_rwlock_timedwrlock(3), pthread_rwlock_unlock(3)
CHANGE HISTORY
First released in Issue 5.
Issue 6
The following changes are made for alignment with IEEE Std 1003.1j-2000:
- The margin code in the SYNOPSIS is changed to THR to indicate that the functionality is now part of the Threads option (previously it was part of the Read-Write Locks option in IEEE Std 1003.1j-2000 and also part of the XSI extension).
- The [EDEADLK] error is deleted as a
pthread_rwlock_trywrlock() error. - The SEE ALSO section is updated.
IEEE Std 1003.1-2001 (“POSIX.1”)/Cor 2-2004, item XSH/TC2/D6/104 is applied, updating the ERRORS section so that the [EDEADLK] error includes detection of a deadlock condition.
Issue 7
The pthread_rwlock_trywrlock () and
pthread_rwlock_wrlock () functions are moved from the
Threads option to the Base.
The [EINVAL] error for an uninitialized read-write lock object is removed; this condition results in undefined behavior.
POSIX.1-2008, Technical Corrigendum 2, XSH/TC2-2008/0290 [720] and XSH/TC2-2008/0291 [722] are applied.