Attempts to acquire a read-write lock object for write access
without waiting.
1 – C Binding
#include <pthread.h>
int
pthread_rwlock_trywrlock (
pthread_rwlock_t *rwlock);
2 – Arguments
rwlock
Address of the read-write lock object to acquire for write
access.
3 – Description
This routine attempts to acquire the read-write lock referenced
by rwlock for write access. If any thread already holds that lock
for write access or read access, this routine fails and returns
[EBUSY] and the calling thread does not wait for the lock to
become available.
Results are undefined if the calling thread holds the read-write
lock (whether for read or write access) at the time this routine
is called.
If the read-write lock object referenced by rwlock is not
initialized, the results of calling this routine are undefined.
Realtime applications can encounter priority inversion when using
read-write locks. The problem occurs when a high-priority thread
acquires a read-write lock that is about to be unlocked (that
is, posted) by a low-priority thread, but the low-priority thread
is preempted by a medium-priority thread. This scenario leads to
priority inversion in that a high-priority thread is blocked by
lower-priority threads for an unlimited period of time. During
system design, realtime programmers must take into account the
possibility of priority inversion and can deal with it in a
number of ways, such as by having critical sections that are
guarded by read-write locks execute at a high priority, so that
a thread cannot be preempted while executing in its critical
section.
4 – Return Values
If an error condition occurs, this routine returns an integer
value indicating the type of error. Possible return values are as
follows:
Return Description
0 Successful completion, the read-write lock object was
acquired for write access.
[EBUSY] The read-write lock could not be acquired for write
access because it was already locked for write access
or for read access.
[EDEADLCK] The current thread already owns the read-write lock
for write or read access.
[EINVAL] The value specified by rwlock does not refer to an
initialized read-write lock object.
5 – Associated Routines
pthread_rwlockattr_init()
pthread_rwlock_init()
pthread_rwlock_rdlock()
pthread_rwlock_unlock()
pthread_rwlock_wrlock()