The Open Group Base Specifications Issue 7
IEEE Std 1003.1-2008, 2016 Edition
Copyright © 2001-2016 The IEEE and The Open Group

#### 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].

The following sections are informative.

#### EXAMPLES

> None.

#### APPLICATION USAGE

> Applications using these functions may be subject to priority inversion, as discussed in XBD 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

> XBD Priority Inversion, Memory Synchronization, <pthread.h>

#### 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/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.

End of informative text.

return to top of page

UNIX ® is a registered Trademark of The Open Group.
POSIX ® is a registered Trademark of The IEEE.
Copyright © 2001-2016 The IEEE and The Open Group, All Rights Reserved
[ Main Index | XBD | XSH | XCU | XRAT ]