Если потоку, заблокированно м
у по объекту блокировки чтения-записи при вызове функции pthread_rwlock_timedrdlock(), передается сигнал, то после его обработки поток возобновит ожидание освобождения блокировки, как если бы оно и не прерывалось. Вызывающий поток может попасть в ловушку взаимоблокировки, если во время вызова он удерживает блокировку для обеспечения записи по объекту, адресуемому параметром rwlock
. Результаты не определены, если эта функция вызывается с неинициализированным объектом блокировки чтения-записи. Возвращаемое значение
Функция pthread_rwlock_timedrdlock() возвра щ
ает нулевое значение, если блокировка для чтения по объекту блокировки чтения-записи, адресуе м о м у пара м етро м rwloc, предоставлена. В противно м случае возвращается код ошибки, обозначающий ее характер. Ошибки
Функция pthread_rwlock_timedrdlock () завершится неудачно, если:
[ETIMEDOUT]
блокировка не м огла быть предоставлена до истечения за д анного интервала вре м ени. Функция pthread_rwlock_timedrdlock () м
ожет завершиться неу д ачно, если: [EAGAIN]
блокировка д ля чтения не м огла быть пре д оставлена, поскольку превышено м
акси м альное число блокировок чтения по объекгу, адресуемому пара м етро м rwlock [EDEADLK]
вызываю щ ий поток уже у д ерживает объект блокировки для обеспечения записи по объекту, адресуемому параметром rwlockr, [EINVAL]
значение, заданное параметром rwlock, не относится к инициализированному объекту блокировки чтения-записи, или значение abs_timeout, выраженное в наносекундах, меньше нуля либо больше или равно 1000 миллионам. Эта функция не возвращает код ошибки [EINTR].
Примеры
Отсутствуют.
Замечания по использованию
Как упо м
иналось в то м е Base Definitions стан д арта IEEE Std 1003.1-2001 (Section 3.285, Priority Inversion), приложения, которые используют эту функцию, могут по д вергнуться инверсии приоритетов. Функция pthread_rwlock_timedrdlock() является частью опций Threads и Timeouts и может быть не пре д
оставлена во всех реализациях. Логическое обоснование
Отсутствует.
Будущие направления
Отсутствуют.
Смотри также
pthread_rwlock_destroy(), pthread_rwlock_rdlock(), pthread_rwlock_timedwrlock(), pthread_rwlock_tryrdlock(), pthread_rwlock_trywrlock(), pthread_rwlock_unlock(), pthread_rwlock_wrlock (), то м
Base Definitions стандарта IEEE Std 1003.1-2001, , . Последовательность внесения изменений
Функция впервые реализована в выпуске Issue 6, основание м
послужил стандарт IEEEStd 1003.1j-2000. pthread_rwlock_timedwrlock
Имя
pthread_rwlock_timedwrlock — функция, блокирующая объект блокировки чтения-записи для обеспечения записи.
Синопсис
THR TMO
#include
#include
int pthread_rwlock_timedwrlock (
pthread_rwlock_t *restrict rwlock,
const struct timespec *restrict abs_timeout);
Описание
Функция pthread_rwlock_timedwrlock () при м
еняет блокировку для обеспечения записи к объекту блокировки чтения-записи, адресуемому пара м етро м rwlock, подобно функции pthread_rwlock_wrlock (). Однако, если блокировка не м ожет быть предоставлена без ожидания, пока другие потоки не освободят ее, это ожидание будет прервано, когда истечет заданный интервал вре м ени. Интервал вре м ени истекает, когда наступит абсолютное вре м я, заданное пара м етро м abs_timeout (т.е. когда показания времени на используемых в системе часах станут равными или превысят значение abs_timeout), или если абсолютное вре м я, заданное пара м етро м abs_timeout, уже наступило в момент вызова. TMR Если поддерживается опция Timers, отсчет интервала вре м
ени происходит с использование м часов CLOCK_REALTIME. Если опция Timers не поддерживается, отсчет интервала времени происходит с использованием системных часов, значение которых возвращает функция time (). Разрешение для интервала времени определяется разрешением часов, которые используются для его отсчета. Тип данных timespec определяется в заголовке . Ни при каких условиях эта функция не завершится неудачно, если блокировка может быть предоставлена немедленно. В проверке достоверности параметра abs_timeout
нет никакой необходимости, если блокировка может быть предоставлена немедленно. Если потоку, заблокированно м
у по объекту блокировки чтения-записи при вызове функции pthread_rwlock_timedwrlock(), передается сигнал, то после его обработки поток возобновит ожидание освобождения блокировки, как если бы оно и не прерывалось.