- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Параллельное и распределенное программирование на С++ - Хьюз Камерон
Шрифт:
Интервал:
Закладка:
[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, то вызывающий поток не получит эту блокировку, если ее удерживает записывающий поток или если по этому объекту блокировки заблокированы записывающие потоки такого же или более высокого приоритета; в противном случае вызывающий поток получит блокировку.
Если опция Thread Execution Scheduling не поддерживается, то только конкретнал реализация определяет, получит ли вызывающий поток эту блокировку, если никакой записывающий поток не удерживает этот объект блокировки и существуют другие записывающие потоки, заблокированные по этому объекту. Если записывающий поток удерживает этот объект блокировки, вызывающий поток не получит блокировку для чтения. Если блокировка для чтения не предоставлена, вызывающий поток блокируется до тех пор, пока он не получит блокировку. Вызывающий поток может попасть в ловушку взаимоблокировки, если во время вызова он удерживает блокировку для обеспечения записи.
Поток м ожет удерживать несколько параллельных блокировок для чтения по объекту rwlock (т.е. функция pthread_rwlock_rdlock () м ожет быть успешно вызвана n раз). В этом случае приложение должно гарантировать, что поток выполнит соответствующие действия по разблокировке объекта rwlock (т.е. он n раз вызовет функцию pthread_rwlock_unlock ()).
Максимальное количество одновременных (и гарантированно успешных) блокировок для чтения, которое может быть применено к объекту блокировки чтения-записи, определяется конкретной реализацией. В случае превышения этого максимума функция pthread_rwlock_rdlock () может завершиться неудачно.
Функция pthread_rwlock_tryrdlock() при м еняет блокировку для обеспечения чтения подобно функции pthread_rwlock_rdlock(), за исключение м того, что эта функция завершится неудачно, если эквивалентный вызов функции pthread_rwlock_rdlock() заблокировал вызывающий поток. Ни в каких случаях функция pthread_rwlock_tryrdlock() не блокирует потоки; она всегда либо добивается блокировки, либо немедленно завершается с неудачным результатом.
Результаты выполнения этих функций не определены, если любая из них вызывается с неинициализированным объектом блокировки чтения-записи. Если потоку, ожидающему освобождения блокировки чтения-записи для обеспечения блокировки чтения передается сигнал, то после его обработки поток возобновит ожидание освобождения блокировки, как если бы оно и не прерывалось.
Возвращаемые значения
При успешном завершении функция pthread_rwlock_rdlock() возвращает нулевое значение; в противном случае — код ошибки, обозначающий ее характер.
Функция pthread_rwlock_tryrdlock () возвращает нулевое значение, если блокировка для чтения по объекту блокировки чтения-записи, адресуемому параметром rwloc, предоставлена. В противном случае возвращается код ошибки, обозначающий ее характер.
Ошибки
Функция pthread_rwlock_tryrdlock () завершится неудачно, если:
[EBUSY] блокировка чтения-записи не могла быть предоставлена для чтения, поскольку удерживает блокировку записывающий поток, или по этому объекту заблокирован записывающий поток с соответствующим приоритетом .
Функции pthread_rwlock_rdlock() и pthread_rwlock_tryrdlock() м огут завершиться неудачно, если:
[EINVAL] значение, заданное пара м етро м rwlock, не относится к инициализированно м у объекту блокировки чтения-записи;
[EAGAIN] блокировка не м огла быть предоставлена для чтения, поскольку превышено м акси м альное число блокировок чтения по объекту, адресуе м о м у пара м етро м rwlock.
Функция pthread_rwlock_rdlock () м ожет завершиться неудачно, если: