VMS Help  —  POSIX Threads, PTHREAD routines, pthread_rwlock_trywrlock
    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()
Close Help