PTHREAD_R...TRYWRLOCK(3P)
π PTHREAD_R...TRYWRLOCK(3P) β POSIX Programmer's Manual
okay bestie, before we even get into it β this page lives in the POSIX Programmer's Manual, and there's a lil disclaimer you need to know first:
π¨ 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.
so basically: this is the spec, and your actual machine might be doing its own lil thing. always double-check the Linux page, fr fr. π
β¨ 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
So pthread_rwlock_trywrlock() shall apply a write lock like the pthread_rwlock_wrlock() function β same vibe, one key difference: it shall fail if any thread currently holds rwlock (for reading or writing). No waiting, no queuing, just "nope, busy" energy. π
And pthread_rwlock_wrlock() 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. Like, you're in the queue, you're waiting, you're fine. β
Now the spicy part: 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]. Either way bestie, that's not the outcome you want. π
Results are undefined if any of these functions are called with an uninitialized read-write lock. Undefined! Not "kinda weird", not "probably fine" β undefined. Do not. π βοΈ
And one more iconic detail: 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. The wait just keeps going, unbothered, main character energy. π
π RETURN VALUE
pthread_rwlock_trywrlock() 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, pthread_rwlock_wrlock() shall return zero; otherwise, an error number shall be returned to indicate the error.
so like, 0 = slay, anything else = read the ERRORS section babe π
π₯ 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]. Not a thing here. π«
The following sections are informative.
π¦ EXAMPLES
None.
literally none. the examples section said "no thoughts, head empty". π
πΈ APPLICATION USAGE
Applications using these functions may be subject to priority inversion, as discussed in the Base Definitions volume of POSIX.1β2017, Section 3.291, Priority Inversion.
yeah, priority inversion is real and it's giving "your high-priority thread is stuck behind a low-priority one". go read Section 3.291. iykyk. β
π 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.
recommended, not required, so don't come for me if your impl does something else. π«Ά
π 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β2017, Section 3.291, Priority Inversion, Section 4.12, Memory Synchronization, <pthread.h>
π COPYRIGHT
Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 7, 2018 Edition, Copyright (C) 2018 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. 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.opengroup.org/unix/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 .
and that's the whole page bestie π«Ά brought to you by IEEE/The Open Group, 2017 β PTHREAD_R...TRYWRLOCK(3P), locking read-write locks for writing since forever. go forth and wrlock responsibly, mwah πβ¨
π¦ where this page comes from
- alpine 3.22: man-pages-posix 2017a-r0 Β· custom
- alpine 3.23: man-pages-posix 2017a-r0 Β· custom
- alpine 3.24: man-pages-posix 2017a-r0 Β· custom
- arch rolling: man-pages 6.19-1
- arch rolling: man-pages 6.20-1 Β· BSD-2-Clause AND BSD-3-Clause AND BSD-4.3TAHOE AND BSD-4-Clause-UC AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-or-later AND GPL-3.0-or-later AND LGPL-3.0-linking-exception AND LGPL-3.0-or-later AND LicenseRef-Public-Domain AND LicenseRef-UltraPermissive AND Linux-man-pages-1-para AND Linux-man-pages-copyleft AND Linux-man-pages-copyleft-2-para AND Linux-man-pages-copyleft-var AND MIT AND Spencer-94
- nixpkgs unstable: man-pages-posix 2017a
- opensuse-leap 16.0: man-pages-posix 2017a-160000.4.1 Β· SUSE-IEEE
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms