`
Читать книги » Книги » Компьютеры и Интернет » Прочая околокомпьютерная литература » Параллельное и распределенное программирование на С++ - Хьюз Камерон

Параллельное и распределенное программирование на С++ - Хьюз Камерон

Перейти на страницу:

Имя

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.

Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Параллельное и распределенное программирование на С++ - Хьюз Камерон, относящееся к жанру Прочая околокомпьютерная литература. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)