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.