Updated: April 19, 2023 |
Lock a read-write lock for reading
#include <pthread.h> #include <time.h> int pthread_rwlock_timedrdlock( pthread_rwlock_t * rwlock, const struct timespec * abs_timeout );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The pthread_rwlock_timedrdlock() function applies a read lock to the read-write lock referenced by rwlock as in pthread_rwlock_rdlock().
However, if the lock can't be acquired without waiting for other threads to unlock it, this wait terminates when the specified timeout expires. The timeout expires when the absolute time specified by abs_timeout passes, as measured by the clock on which timeouts are based (i.e. when the value of that clock equals or exceed abs_timeout), or if the absolute time specified by abs_timeout has already been passed at the time of the call.
The timeout is based on the CLOCK_REALTIME clock. As a QNX Neutrino extension, you can use pthread_rwlockattr_setclock() to change the clock to use for the timeout, and pthread_rwlockattr_getclock() to get the selected clock ID.
If you want to choose the clock against which the timeout is measured, you can instead use pthread_rwlock_clockrdlock(), which is similar to pthread_rwlock_timedrdlock() and differs only because of its clock parameter (clk). Choosing the clock prevents the timeout from being affected by changes to the system time.
If the read-write lock can be locked immediately, the validity of the abs_timeout parameter isn't checked, and the function won't fail with a timeout.
If a signal that causes a signal handler to be executed is delivered to a thread blocked on a read-write lock via a call to pthread_rwlock_timedrdlock(), upon return from the signal handler the thread resumes waiting for the lock as if it hadn't been interrupted.
The calling thread may deadlock if at the time the call is made it holds a write lock on rwlock. The results are undefined if this function is called with an uninitialized read-write lock.
Zero if the lock for reading on the read-write lock object referenced by rwlock is acquired, or an error number to indicate the error.
Safety: | |
---|---|
Cancellation point | Yes |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |