Рейтинговые книги
Читем онлайн Параллельное и распределенное программирование на С++ - Хьюз Камерон

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 167 168 169 170 171 172 173 174 175 ... 181

Имя

pthread_mutexattr_setprotocol, pthread_mutexattr_getprotocol

Синопсис

THR #include <pthread.h>

TPP|TPI

int pthread_mutexattr_getprotocol (const pthread_mutexattr_t *restrict attr, int *restrict protocol);

int pthread_mutexattr_setprotocol (

pthread_mutexattr_t * attr, int protocol) ;

Описание

Функции pthread_mutexattr_getprotocol() и pthread_mutexattr_setprotocol () используются для считывания и установки соответственно атрибута protocol в объекте атрибутов м ьютекса, адресуе м о г о пара м етро м attr, который был ранее создан с помощью функции pthread_mutexattr_init ().

Параметр protocol определяет протокол, которому необходимо следовать при использовании мьютексов. Этот атрибут может иметь следующие значения (которые определены в заголовке <pthread. h>):

PTHREAD_PRIO_NONE

TPI  PTHREAD_PRIO_INHERIT

TPP  PTHREAD_PRIO_PROTECT

Если поток владеет мьютексом с использованием значения PTHREAD_PRIO_NONE для атрибута protocol, то факт обладания мьютексом не отражается на значении его приоритета и стратегии планирования.

TPI Если поток блокирует потоки с более высоким приоритетом благодаря тому, что он владеет одним или несколькими мьютексами, у которых атрибут protocol и м еет значение PTHREAD_PRIO_INHERIT, то он будет выполняться с наивысши м из приоритетов потоков, ожидаю щ их освобождения любого из м ьютексов.

TPP Если поток владеет одни м или нескольки м и м ьютекса м и, у которых атрибут protocol имеет значение PTHREAD_PRIO_PROTECT, то он будет выполняться с самым высоким из предельных приоритетов всех мьютексов, принадлежащих этому потоку и инициализированных с этим атрибутом, независимо от того, заблокированы другие потоки по любому из этих мьютексов или нет.

Пока поток удерживает м ьютекс, у которого атрибут protocol был инициализирован значение м PTHREAD_PRIO_INHERIT или PTHREAD_PRIO_PROTECT, он не будет претенденто м для пере м ещения в конец очереди планируе м ых заданий в результате из м енения его исходного приоритета, напри м ер, после вызова функции sched_setparam (). Аналогично, если поток разблокирует м ьютекс, у которого атрибут protocol был инициализирован значение м PTHREAD_PRIO_INHERIT или PTHREAD_PRIO_PROTECT, он не будет претенденто м для пере м ещения в конец очереди планируе м ых заданий в результате из м енения его исходного приоритета.

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

TPI Если поток обращается к функции pthread_mutex_lock (), а атрибут protocol задавае м ого м ьютекса был инициализирован значение м PTHREAD_PRIO_INHERIT, и если вызывающий поток блокируется из-за того, что м ьютекс прина д лежит друго м у потоку, то этот поток — владелец м ьютекса — наследует уровень приоритета вызываю щ его потока, приче м до тех пор, пока он продолжает удерживать м ьютекс. Реализация устанавливает приоритет выполнения согласно м акси м ально м у значению (выбранного из заданного и всех унаследованных приоритетов). Более того, если этот поток — владелец м ьютекса са м блокируется по друго м у м ьютексу, такой же эффект наследования приоритетов рекурсивно распространяется и на этого владельца.

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

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

Ошибки

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

[ ENOTSUP ] значение, заданное пара м етро м pro tocol , не по д держивается.

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

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

[EPERM] инициатор вызова не обладает привиле г ия м и для выполнения этой операции.

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

Примеры

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

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

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

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

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

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

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

Смотри также

pthread_cond_destroy (), pthread_create (), pthread_mutex_destroy (), то м Base Defmidons стандартаШЕЕ Std 1003.1-2001, <pthread.h>.

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

Функции впервые реализованы в выпуске Issue 5. Включены для согласования с расширением POSIX Threads Extension.

Отмечены как часть группы Realtime Threads Feature Group.

Issue 6

Функции pthread_mutexattr_getprotocol() и pthread_mutexattr_setprotocol () от м ечены как часть опции Threads и одной из опций Thread Priority Protection или Thread Priority Inheritance.

Код ошибки [ENOSYS] был исключен, поскольку его нет с м ысла учитывать, если реализация не по д держивает опции Thread Priority Protection или Thread Priority Inheritance.

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

pthread_mutexattr_getpshared, pthread_mutexattr_setpshared

Имя

pthread_mutexattr_getpshared, pthread_mutexattr_setpshared — функ-ции считывания и установки атрибута process-shared.

Синопсис

THR #include <pthread.h> TSH

int pthread_mutexattr_getpshared (

const pthread_mutexattr_t *restrict attr, int *restrict pshared); int pthread_mutexattr_setpshared(

pthread_mutexattr_t *attr, int pshared);

Описание

Функция pthread_mutexattr_getpshared () используется дл я получения значения атрибута process - shared объекта атрибутов, адресуе м о г о пара м етро м attr. Функция pthread_mutexattr_setpshared() позволяет установить атрибут process-shared в инициализированно м объекте атрибутов, адресуе м о м пара м етро м attr.

Атрибут process-shared устанавливается равны м значению PTHREAD_PROCESS_SHARED, чтобы позволить обработку м ьютекса любы м дру г и м потоко м, который и м еет доступ к па м яти, в которой раз м е щ ен этот м ьютекс, даже если он раз м е щ ен в па м яти, сов м естно используе м ой нескольки м и процесса м и. Если атрибут process-shared установлен равны м значению PTHREAD_PROCESS_PRIVATE, м ьютекс будет обрабатываться только теми потоками, созданными в одном процессе с потоком, который инициализировал этот мьютекс; если потоки из различных процессов попытаются работать с таким мьютексом, то дальнейшее их поведение не определено. По умолчанию этот атрибут устанавливается равны м значению PTHREAD_PROCESS_PRIVATE.

1 ... 167 168 169 170 171 172 173 174 175 ... 181
На этой странице вы можете бесплатно читать книгу Параллельное и распределенное программирование на С++ - Хьюз Камерон бесплатно.
Похожие на Параллельное и распределенное программирование на С++ - Хьюз Камерон книги

Оставить комментарий