Чтение онлайн

на главную - закладки

Жанры

Параллельное и распределенное программирование на С++
Шрифт:

PTHREAD_MUTEX_NORMAL

Мьютекс этого типа не обнаруживает взаи м облокировки. Поток, пытаясь перезаблокировать такой м ьютекс без первоначального его разблокирования, попадает во взаи м облокировку. Попытка разблокировать м ьютекс, заблокированный други м потоко м, приводит к неопределенно м у поведению. Попытка разблокировать незаблокированный м ьютекс также приводит к неопределенно м у поведению.

PTHREAD_MUTEX_ERRORCHECK

Мьютекс

этого типа выполняет проверку на наличие ошибок. Поток, пытаясь перезаблокировать такой мьютекс без первоначального его разблокирования, генерирует код ошибки. При попытке разблокировать мьютекс, заблокированный другим потоком, генерируется код ошибки. При попытке разблокировать незаблокированный мьютекс также генерируется код ошибки.

PTHREAD_MUTEX_RECURS IVE

П оток, пытаясь перезаблокировать такой мьютекс без первоначального его разблокирования, успешно его блокирует. Взаимоблокировка, возникаю щ ая в результате переблокирования м ьютексов типа PTHREAD_MUTEX_NORMAL, не м ожет произойти с м ьютекса м и этого типа. Множественное блокирование такого м ьютекса потребует такого же количества разблокировок, которые полностью освободят м ьютекс, прежде чем другой поток сможет его захватить. При попытке разблокировать мьютекс, заблокированный другим потоком, генерируется код ошибки. При попытке разблокировать незаблокированный мьютекс также генерируется код ошибки.

PTHREAD_MUTEX_DEFAULT

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

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

При успешном завершении функция pthread_mutexattr_gettype возвращает нулевое значение и сохраняет значение атрибута type, считанное из объекта attr, в объекте, адресуемом параметром type; в противном случае она возвращает код ошибки, обозначающий ее характер.

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

Ошибки

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

[EINVAL] значение, заданное пара м етро м type, недействительно.

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

[EINVAL] значение, заданное пара м етро м attr, недействительно.

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

Примеры

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

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

В приложениях пре д лагалось не использовать м ьютекс типа PTHREAD_MUTEX_RECURSIVE с условны м и пере м енны м и, поскольку неявная блокировка, выполненная д ля функций pthread_cond_timedwait или pthread_cond_wait , м ожет в д ействительности не освобо д ить м ьютекс (если он был заблокирован м

ногократно). Если это произой д ет, никакой д ругой поток не с м ожет у д овлетворить условию пре д иката.

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

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

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

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

Смотри также

pthread_cond_timedwait, том Base Definitions стандарта IEEE Std 1003.1-200l, <pthread.h>.

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

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

Приложен список опечаток Open Group Corrigendum U033/3. Был отредактирован раздел «Синопсис» для функции pthread_mutexattr_gettype , в результате чего первый аргумент получил тип const pthread_mutexattr_t*.

В целях согласования со стандартом ISO/IEC 9899: 1999 в прототип функции pthread_mutexattr_gettype было добавлено ключевое слово restrict.

pthread_once

Имя

pthread_once — функция д ина м ической инициализации пакетов.

Синопсис

THR #include <pthread.h>

int pthread_once (pthread_once_t *once_control, void (*init_rout_ne) (void)); pthread_once_t once_control = PTHREAD_ONCE_INIT;

Описание

При перво м обра щ ении к функции pthread_once любы м потоко м процесса с заданны м пара м етро м once_control будет вызвана функция ini t_routine без аргументов. Последующие обра щ ения к функции pthread_once с те м же пара м етро м once_control не вызывают функцию init_routin e. Возвра щ ение из функции pthread_once означает, что функция init_routine выполнена. Пара м етр once_control определяет, вызываласьли соответствую щ ал функция инициализации.

Функция pthread_once не является точкой от м ены. Но если функция init_routine является точкой от м ены, и от м ена таки происходит, то ее воздействие на пара м етр once_control будет таки м, как если бы функция pthread_once никогда не вызывалась.

Константа PTHREAD_ONCE_INIT определяется в заголовке <pthread. h>.

Поведение функции pthread_once будет неопределенны м, если пара м етр once_control и м еет авто м атический класс па м яти (объекты этого класса раз м е щ аются в стеке и инициализируются всякий раз при входе в блок, где они объявлены, иразрушаются при выходе из этого блока) или не инициализирован константой PTHREAD_ONCE_INIT.

Поделиться:
Популярные книги

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Бастард Императора. Том 8

Орлов Андрей Юрьевич
8. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 8

Чужая дочь

Зика Натаэль
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Один на миллион. Трилогия

Земляной Андрей Борисович
Один на миллион
Фантастика:
боевая фантастика
8.95
рейтинг книги
Один на миллион. Трилогия

Помещицы из будущего

Порохня Анна
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Помещицы из будущего

Шлейф сандала

Лерн Анна
Фантастика:
фэнтези
6.00
рейтинг книги
Шлейф сандала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Император

Рави Ивар
7. Прометей
Фантастика:
фэнтези
7.11
рейтинг книги
Император

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Чайлдфри

Тоцка Тала
Любовные романы:
современные любовные романы
6.51
рейтинг книги
Чайлдфри