Установить блокировку чтения/записи для чтения
#include <pthread.h>#include <time.h>int pthread_rwlock_timedrdlock( pthread_rwlock_t *rwlock,const struct timespec *abs_timeout );
libc
Функция pthread_rwlock_timedrdlock() применяет блокировку чтения к блокировке чтения-записи, на которую ссылается rwlock как в pthread_rwlock_rdlock().
Однако, если блокировку нельзя получить, не дожидаясь, пока другие потоки разблокируют ее, это ожидание завершается по истечении указанного времени ожидания. Тайм-аут истекает, когда проходит абсолютное время, указанное в abs_timeout, измеряемое часами, на которых основаны тайм-ауты (т.е. когда значение этих часов равно или превышает abs_timeout), или если абсолютное время, указанное в abs_timeout на момент вызова уже прошло.
Время ожидания основано на часах CLOCK_REALTIME
.
Если блокировку чтения-записи можно заблокировать немедленно, допустимость параметра abs_timeout не проверяется, и функция не завершится с ошибкой по тайм-ауту.
Если сигнал, вызывающий выполнение обработчика сигнала, доставляется потоку, заблокированному блокировкой чтения-записи, посредством вызова pthread_rwlock_timedrdlock(), по возвращении из обработчика сигнала поток возобновляет ожидание блокировки, как если бы он не был прерван.
Вызывающий поток может заблокироваться, если во время вызова он удерживает блокировку записи на rwlock. Результаты не определены, если эта функция вызывается с неинициализированной блокировкой чтения-записи.
Нуль, если получена блокировка для чтения объекта блокировки чтения-записи, на который ссылается rwlock, или номер ошибки, указывающий на ошибку.
POSIX 1003.1 Threads, Timeouts
pthread_rwlock_destroy(), pthread_rwlock_init(), pthread_rwlock_timedwrlock(), pthread_rwlock_trywrlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock(), struct timespec
Предыдущий раздел: Описание API системной библиотеки