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()