pthread_rwlock_rdlockpthread_rwlock_tryrdlock
- acquire a read/write lock for reading
LIBRARY
Lb libpthread
SYNOPSIS
#include <pthread.h> int
pthread_rwlock_rdlock (pthread_rwlock_t *lock); int
pthread_rwlock_tryrdlock (pthread_rwlock_t *lock);
DESCRIPTION
The
pthread_rwlock_rdlock ();
function acquires a read lock on
Fa lock
provided that
Fa lock
is not presently held for writing and no writer threads are
presently blocked on the lock.
If the read lock cannot be
immediately acquired, the calling thread blocks until it can
acquire the lock.
The
pthread_rwlock_tryrdlock ();
function performs the same action, but does not block if the lock
cannot be immediately obtained (i.e., the lock is held for writing
or there are waiting writers).
A thread may hold multiple concurrent read locks.
If so,
pthread_rwlock_unlock ();
must be called once for each lock obtained.
The results of acquiring a read lock while the calling thread holds
a write lock are undefined.
IMPLEMENTATION NOTES
To prevent writer starvation, writers are favored over readers.
RETURN VALUES
If successful, the
pthread_rwlock_rdlock ();
and
pthread_rwlock_tryrdlock ();
functions will return zero.
Otherwise an error number will be returned
to indicate the error.
ERRORS
The
pthread_rwlock_tryrdlock ();
function will fail if:
Bq Er EBUSY
The lock could not be acquired because a writer holds the lock or
was blocked on it.
The
pthread_rwlock_rdlock ();
and
pthread_rwlock_tryrdlock ();
functions may fail if:
Bq Er EAGAIN
The lock could not be acquired because the maximum number of read locks
against
Fa lock
has been exceeded.
Bq Er EDEADLK
The current thread already owns
Fa lock
for writing.
Bq Er EINVAL
The value specified by
Fa lock
is invalid.
Bq Er ENOMEM
Insufficient memory exists to initialize the lock (applies to
statically initialized locks only).