pthread_rwlock_timedwrlock()

Установить блокировку чтения/записи для записи

Прототип:

#include <pthread.h>
#include <time.h>
int pthread_rwlock_timedwrlock( pthread_rwlock_t *rwlock,
const struct timespec *abs_timeout );

Аргументы:

rwlock
Блокировка чтения-записи, которую требуется заблокировать.
abs_timeout
Указатель на структуру timespec, содержащую абсолютное максимальное время ожидания для получения блокировки.

Библиотека:

libc

Описание:

Функция pthread_rwlock_timedwrlock() применяет блокировку записи к блокировке чтения-записи, на которую ссылается rwlock, как в pthread_rwlock_wrlock().

Однако, если блокировку нельзя получить, не дожидаясь, пока другие потоки разблокируют блокировку, это ожидание завершается по истечении указанного времени ожидания. Тайм-аут истекает, когда проходит абсолютное время, указанное в abs_timeout, измеряемое часами, на которых основаны тайм-ауты (т.е. когда значение этих часов равно или превышает abs_timeout), или если абсолютное время, указанное в abs_timeout на момент вызова уже прошло.

Время ожидания основано на часах CLOCK_REALTIME.

Если блокировку чтения-записи можно заблокировать немедленно, допустимость параметра abs_timeout не проверяется, и функция не завершится с ошибкой по тайм-ауту.

Если сигнал, вызывающий выполнение обработчика сигнала, доставляется в поток, заблокированный блокировкой чтения-записи, посредством вызова pthread_rwlock_timedwrlock(), по возвращении из обработчика сигнала поток возобновляет ожидание блокировки, как если бы он не был прерван.

Вызывающий поток может заблокироваться, если во время выполнения вызова он удерживает блокировку записи на rwlock. Результаты не определены, если эта функция вызывается с неинициализированной блокировкой чтения-записи.

Возвращаемое значение:

Нуль, если получена блокировка для записи объекта блокировки чтения-записи, на который ссылается rwlock, или номер ошибки, указывающий на ошибку.

Коды ошибок:

EAGAIN
Не удалось получить блокировку чтения, так как будет превышено максимальное количество блокировок чтения для блокировки.
EDEADLK
Вызывающий поток уже удерживает блокировку записи на rwlock.
EINVAL
Значение, заданное параметром rwlock, не относится к инициализированному объекту блокировки чтения-записи, или значение abs_timeout в наносекундах меньше нуля или больше или равно миллиарду.
ETIMEDOUT
Блокировка не может быть получена до истечения указанного времени ожидания.

Классификация:

POSIX 1003.1 Threads, Timeouts

Безопасность использования
Точка остановки потока
Да
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

pthread_rwlock_destroy(), pthread_rwlock_init(), pthread_rwlock_timedrdlock(), pthread_rwlock_trywrlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock(), struct timespec




Предыдущий раздел: Описание API системной библиотеки