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

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

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

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

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

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

Смотри также

pthread_mutex_destroy (), pthread_mutex_lock(), pthread_mutex_trylock(), time (), то м Base Definitions стандарта IEEE Std 1003.1-2001, <pthread. h>, <time. h>.

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

Функции впервые реализованы в выпуске Issue 6, основанием послужил стандарт IEEEStd 1003.1d-1999.

pthread_mutexattr_destroy

Имя

pthread_mutexattr_destroy

Синопсис

THR #include <pthread.h>

int pthread_mutexattr_destroy (

pthread_mutexattr_t *attr); int pthread_mutexattr_init (pthread_mutexattr_t *attr);

Описание

Функция pthread_mutexattr_destroy () используется для разрушения объекта атрибутов м ьютекса, в результате чего этот объект становится неинициализированным. В конкретной реализации функция pthread_mutexattr_destroy() м ожет устанавливать объект, адресуе м ый пара м етро м attr, равны м недействительно м у значению. Разрушенный объект атрибутов м ожно снова инициализировать с по м о щ ью функции pthread_mutexattr_init (); результаты ссылки на этот объект после его разрушения не определены.

Результаты не определены, если функция pthread_mutexattr_init () вызывается, ссылаясь на уже инициализированный объект атрибутов attr.

После того как объект атрибутов мьютекса был использован для инициализации одного или нескольких мьютексов, Любая функция, которая оказывает влияние на объект атрибутов (включал деструктор), никак не отразится на ранее инициализированных мьютексах.

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

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

Ошибки

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

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

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

[ENOMEM]  для инициализации объекта атрибутов м ьютекса недостаточно существующей памяти.

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

pthread_mutexattr_destroy, pthread_mutexattr_init — функции разрушения и инициализации объекта атрибутов м ьютекса.

Примеры

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

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

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

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

Для получения общих разъяснений назначения атрибутов см. описание функции pthread_attr_init (). Объекты атрибутов позволяют реализациям экспериментировать с полезными расширениями и разрешают использовать расширение этого тома стандарта IEEE Std 1003.1-2001, не изменяя существующих функций. Таким образом, они обеспечивают возможности для будущего расширения этого тома стандарта IEEE Std 1003.1-2001 и уменьшают соблазн преждевременно стандартизировать семантику, которая еще широко не реализована или не до конца понята.

Рассматривалась возможность использования таких дополнительных атрибутов мьютексов, как spin__only, limited spin, no__spin, recursive и metered. (Считаем необходимым разъяснить назначение таких атрибутов, как recursive nmetered: рекурсивные мьютексы позволяют выполнение нескольких повторных блокировок со стороны текущего владельца; мьютексы с регистрирацией фиксируют длину очереди, время ожидания и т.д.) Поскольку еще нет достаточных данных о том, насколько полезны эти атрибуты, в данном томе стандарта IEEE Std 1003.1-2001 они не определены. Однако объекты атрибутов мьютексов позволяют проверить эти идеи на предмет возможной их стандартизации в будущем.

Атрибуты мьютекса и производительность

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

Существует по крайней мере один метод реализации, который можно использовать для сокращения расходов в период блокирования на проверку того, имеет ли мьютекс нестандартные атрибуты. Один такой метод заключается в том, чтобы предварительно заблокировать любые мьютексы, которые инициализированы нестандартными атрибутами. Любая попытка позже заблокировать такой мьютекс заставит реализацию перейти на «медленный путь», как если бы мьютекс был недоступен; затем реализация могла бы «по-настоящему» заблокировать «нестандартный» мьютекс. Базовая операция разблокировки более сложна, поскольку реализация никогда в действительности не желает освобождать мьютекс, который был предварительно заблокирован. Это показывает, что (в зависимости от оборудования) существует необходимость применения оптимизаций для более эффективной обработки часто используемых атрибутов мьютекса.

Использование общей памяти и синхронизация процессов

Существование функций распределения памяти в этом томе стандарта IEEE Std 1003.1-2001 дает приложению возможность выделять память объектам синхронизации из того раздела, который доступен многим процессам (а следовательно, и потокам многих процессов).

Чтобы реализовать такую возможность при эффективной поддержке обычного (т.е. однопроцессорного) случая, был определен атрибут process-shared.

Если реализация по д держивает опцию _POSIX_THREAD_PROCESS_SHARED, то атрибут process-shared м ожно использовать для индикации того, что к мьютексам или условным переменным могут получать доступ потоки сразу нескольких процессов.

Для того чтобы объекты синхронизации по у м олчанию создавались в са м ой эффективной фор м е, для атрибута

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату