Параллельное и распределенное программирование на С++
Шрифт:
Возвращаемые значения
При успешно м завершении функции pthread_rwlock_destroy и pthread_rwlock_init возвра щ ают нулевое значение; в противно м случае — код ошибки, обозначаю щ ий ее характер.
Проверка на наличие ошибок с кода м и [EBUSY] и [EINVAL] реализована (если реализована вооб щ е) так, как будто она выполняется в самом начале работы
Ошибки
Функция pthread_rwlock_destroy м ожет завершиться неудачно, если:
[EBUSY] реализация обнаружила попытку разрушить заблокированный объект, адресуе м ый пара м етро м rwlock;
[EINVAL] значение, за д анное пара м етро м rwlock, не д ействительно.
Функция pthread_rwlock_init завершится неу д ачно, если:
[EAGAIN] систе м а испытывает не д остаток в ресурсах (не и м еется в виду память), необходимых для инициализации еще одного объекта блокировки для чтения и записи;
[ENOMEM] для инициализации объекта блокировки для чтения и записи недостаточно существующей памяти;
[EPERM] инициатор вызова не обладает привилегиями для выполнения этой операции.
Функция pthread_rwlock_init м ожет завершиться неу д ачно, если:
[EBUSY] реализация обнаружила попытку повторно инициализировать объект блокировки, адресуе м ый пара м етро м rwlock, которой был ранее инициализирован, но еще не разрушен;
[EINVAL] значение, заданное пара м етро м attr, не д ействительно.
Эти функции не возвращают ко д ошибки [EINTR].
Примеры
Отсутствуют.
Замечания по использованию
Отсутствуют.
Логическое обоснование
Отсутствует.
Будущие направления
Отсутствуют.
Смотри также
pthread_rwlock_rdlock , pthread_rwlock_timedrdlock , pthread_rwlock_timedwrlock , pthread_rwlock_tryrdlock , pthread_rwlock_trywrlock, pthread_rwlock_unlock, pthread_rwlock_wrlock , том Base Definitions стандарта IEEE Std 1003.1-2001, <pthread.h>.
Последовательность внесения изменений
Функции впервые реализованы в выпуске Issue 5. Issue 6
Для согласования со стандартом IEEE Std 1003.1j-2000 были внесены
• В разделе «Синопсис» изменена метка. Новая метка THR обозначает, что рассматриваемые функции теперь являются частью опции Threads (ранее они относились к опции Read-Write Locks стандарта IEEE Std 1003.1j-2000, а также считались частью дополнения XSI). В раздел «Синопсис» также не входит макрос инициализации.
• Раздел «Описание» отредактирован следующим образом:
— явно отмечено выделение ресурсов при инициализации объекта блокировки для чтения и записи;
— добавлен абзац, в котором указывается, что копии объекта блокировки для чтения и записи использовать нельзя.
• В раздел «Ошибки» добавлен код ошибки [EINVAL] , означающий, что при вызове функции pthread_rwlock_init значение, заданное пара м етро м attr, было недействительно.
• Отредактирован раздел «Смотри также».
В целях согласования со стандарто м ISO/IEC 9899: 1999 в прототип функции pthread_rwlock_init было добавлено ключевое слово restrict.
pthread_rwlock_rdlock, pthread_rwlock_tryrdlock
Имя
pthread_rwlock_rdlock, pthread_rwlock_tryrdlock— функции блокирования объекта блокировки чтения-записи для обеспечения чтения.
Синопсис
THR
#include <pthread.h>
int pthread_rwlock_rdlock (pthread_rwlock_t *rwlock) ; int pthread_rwlock_tryrdlock (pthread_rwlock_t *rwlock) ;
Описание
Функция pthread_rwlock_rdlock при м еняет блокировку для обеспечения чтения к объекгу блокировки чтения-записи, адресуе м о м у пара м етро м rwlock. Вызываю щ ий поток получает блокировку для чте н ия, если никакой записывающий поток не удерживает этот объект блокировки и не существует никаких других записывающих потоков, заблокированных по этому объекту.
TPS Если поддерживается опция Thread Execution Scheduling и потоки, участвующие в данной блокировке, выполняются с использованием стратегий планирования SCHED_FIFO или SCHED_RR, то вызывающий поток не получит эту блокировку, если ее удерживает записывающий поток или если по этому объекту блокировки заблокированы записывающие потоки такого же или более высокого приоритета; в противном случае вызывающий поток получит блокировку.
TSP TSP Если поддерживается опция Thread Execution Scheduling и потоки, участвующие в данной блокировке, выполняются с использованием стратегии планирования SCHED_SPORADIC, то вызывающий поток не получит эту блокировку, если ее удерживает записывающий поток или если по этому объекту блокировки заблокированы записывающие потоки такого же или более высокого приоритета; в противном случае вызывающий поток получит блокировку.