Параллельное и распределенное программирование на С++ - Страница 176

Изменить размер шрифта:

TMR Если поддерживается опция Timers, отсчет интервала вре м ени происходит с использование м часов CLOCK_REALTIME.

Если опция Timers не поддерживается, отсчет интервала времени происходит с использованием системных часов, значение которых возвращает функция time (). Разрешение для интервала времени определяется разрешением часов, которые используются для его отсчета. Тип данных timespec определяется в заголовке . Ни при каких условиях эта функция не завершится неудачно, если блокировка может быть предоставлена немедленно. В проверке достоверности параметра abs_timeout нет никакой необходимости, если блокировка может быть предоставлена немедленно.

Если потоку, заблокированно м у по объекту блокировки чтения-записи при вызове функции pthread_rwlock_timedwrlock(), передается сигнал, то после его обработки поток возобновит ожидание освобождения блокировки, как если бы оно и не прерывалось.

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

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

Функция pthread_rwlock_timedwrlock () возвра щ ает нулевое значение, если блокировка для записи по объекту блокировки чтения-записи, адресуе м о м у пара м етро м rwloc, предоставлена. В противно м случае возвращается код ошибки, обозначающий ее характер.

Ошибки

Фу н кция pthread_rwlock_timedwrlock () завершится неудачно, если:

[ETIMEDOUT] блокировка не м огла быть предоставлена до истечения заданного интервала вре м ени.

Функция pthread_rwlock_timedwrlock () м ожет завершиться неудачно, если:

[EDEADLK]  вызываю щ ий поток уже удерживает объект блокировки по объекту,

адресуе м о м у пара м етро м rwlock;

[EINVAL]  значение, заданное пара м етро м rwlock, не относится к инициализированно м у объекту блокировки чтения-записи, или значение abs_timeout, выраженное в наносекундах, меньше нуля либо больше или равно 1000 миллионам.

Эта функция не возвра щ ает код ошибки [EINTR].

Примеры

Отсутствуют.

Замечания по использованию

Как упоминалось в томе Base Definitions стандарта IEEE Std 1003.1-2001 (Section 3.285, Priority Inversion), приложения, которые используют эту функцию, могут подвергнуться инверсии приоритетов.

Функция pthread_rwlock_timedwrlock() является частью опций Threads и Timeouts и может быть не предоставлена во всех реализациях.

Логическое обоснование

Отсутствует.

Будущие направления

Отсутствуют.

Смотри также

pthread_rwlock_destroy(),pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock(), 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_trywrlock, pthread_rwlock_wrlock

Имя

pthread_rwlock_trywrlock, pthread_rwlock_wrlock — функции, блокирующие объект блокировки чтения-записи для обеспечения записи.

Синопсис

THR

#include

int pthread_rwlock_trywrlock (pthread_rwlock_t *rwlock);

int pthread_rwlock_wrlock (pthread_rwlock_t *rwlock);

Описание

Функция pthread_rwlock_trywrlock () при м еняет блокировку для обеспечения записи подобно функции pthread_rwlock_wrlock(), за исключением того, что эта функция завершится неудачно, если какой-нибудь поток в данный момент удерживает блокировку по объекту, адресуемому пара м етро м rwlock (для чтения или записи).

Функция pthread_rwlock_wrlock () при м еняет блокировку для обеспечения записи к объекту блокировки чтения-записи, адресуе м о м у пара м етро м rwlock. Вызываю щ ий поток получает блокировку для записи, если никакой другой поток (записываю щ ий или считываю щ ий) не удерживает этот объект блокировки. В противно м случае этот поток будет заблокирован до тех пор, пока он не с м ожет получить блокировку. Вызываю щ ий поток м ожет попасть в ловушку взаи м облокировки, если во вре м я вызова он удерживает блокировку чтения-записи (либо для записи, либо для чтения) по объекту, адресуе м о м у пара м етро м rwlock.

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

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

Функция pthread_rwlock_trywrlock() возвра щ ает нулевое значение, если блокировка для записи по объекту блокировки чтения-записи, адресуе м о м у пара м етро м rwloc, предоставлена. В противно м случае возвра щ ается код ошибки, обозначаю щ ий ее характер.

При успешном завершении функция pthread_rwlock_wrlock () возвращает нулевое значение; в противном случае — код ошибки, обозначающий ее характер.

Ошибки

Функция pthread_rwlock_trywrlock () завершится неудачно, если:

[EBUSY] блокировка чтения-записи не м огла быть предоставлена для записи, поскольку заданный объект блокировки уже заблокирован для чтения или записи.

Функции pthread_rwlock_wrlock() и pthread_rwlock_trywrlock() м огут завершиться неудачно, если:

[EINVAL] значение, заданное пара м етро м rwlock, не относится к инициализированно м у объекту блокировки чтения-записи.

Функция pthread_rwlock_wrlock () м ожет завершиться неудачно, если:

[EDEADLK] теку щ ий поток уже удерживает объект блокировки чтения-записи для обеспечения записи или чтения.

Эти функции не возвра щ ают код ошибки [EINTR].

Примеры

Отсутствуют.

Замечания по использованию

Как упо м иналось в то м е Base Definitions стандарта IEEE Std 1003.1-2001 (Section 3.285, Priority Inversion), приложения, которые используют эти функции, м огут подвергнуться инверсии приоритетов.

Логическое обоснование

Отсутствует.

Будущие направления

Отсутствуют.

Смотри также

pthread_rwlock_destroy(),pthread_rwlock_rdlock(), pthread_rwlock_timedrdlock (), pthread_rwlock_timedwrlock (), pthread_rwlock_tryrdlock(),pthread_rwlock_unlock(), том Base Definitions cтaндapтaIEEEStd 1003.1-2001, .

Последовательность внесения изменений

Функции впервые реализованы в вылуске Issue 5.

Issue 6

Для согласования со стандарто м IEEE Std 1003.1j-2000 были внесены следующие изменения:

• В разделе «Синопсис» была из м енена м етка. Новал м етка THR означает, что расс м атривае м ые функции теперь являются частью опции Threads (ранее они от-

носились к опции Read-Write Locks стандарта IEEE Std 1003.1j-2000, а также считались частью дополнения XSI).

• Из раздела «Ошибки» удален абзац, посвященный описанию кода ошибки [EDEADLK] , возвращаемому функцией pthread_rwlock_trywrlock ().

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com