[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Необязательные компоненты библиотеки работы с нитями

В стандарте библиотек нитей POSIX реализация некоторых компонентов объявлена необязательной. Все функции, определенные с помощью API библиотеки нитей, доступны всегда. Некоторые функции могут быть не реализованы. Приложения могут вызывать нереализованные функции, но те всегда будут возвращать код ошибки ENOSYS.

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

Список необязательных компонентов

Определены следующие необязательные компоненты:

Для применения функции наследования приоритета и защиты приоритета необходима функция планирования приоритета.

Необязательный компонент POSIX - адрес стека

С помощью адреса стека можно изменять значение атрибута stackaddr в объекте атрибутов нити. Этот атрибут указывает размещение памяти, отведенной под стек для вновь созданной нити. Дополнительная информация об атрибуте stackaddr приведена в разделе "Адрес стека.

Если этот необязательный компонент реализован, то доступны следующие атрибуты и функции:

Необязательный компонент POSIX - размер стека

С помощью размера стека можно изменять значение атрибута stacksize в объекте атрибутов нити. Этот атрибут указывает минимальный размер области памяти, отведенной под стек для вновь созданной нити. Дополнительная информация об атрибуте stacksize приведена в разделе "Размер стека.

Если этот необязательный компонент реализован, то доступны следующие атрибуты и функции:

Необязательный компонент POSIX - планирование приоритета

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

Если этот необязательный компонент реализован, то доступны следующие атрибуты и функции:

Проверка наличия необязательного компонента

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

Проверка наличия во время компиляции

Для проверки наличия необязательных компонентов в системе на этапе компиляции программы можно применять символьные константы (символы). Эти символы определены в файле заголовка pthread.h директивой препроцессора #define. Символы, соответствующие нереализованным компонентам, директива препроцессора #undef объявляет неопределенными. Проверка символов наличия компонентов должна выполняться в каждой программе, обладающей свойством переносимости.

Ниже приведен список всех символов, соответствующих необязательным компонентам:

Адрес стека _POSIX_THREAD_ATTR_STACKADDR
Размер стека _POSIX_THREAD_ATTR_STACKSIZE
Планирование приоритета _POSIX_THREAD_PRIORITY_SCHEDULING
Наследование приоритета _POSIX_THREAD_PRIO_INHERIT
Защита приоритета _POSIX_THREAD_PRIO_PROTECT
Совместное выполнение процессов _POSIX_THREAD_PROCESS_SHARED

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

#ifndef _POSIX_THREAD_ATTR_STACKSIZE
#error "Необходимо наличие компонента POSIX - Размер стека"
#endif

В файле заголовков pthread.h определяются также символы, которые могут применяться другими файлами заголовков или программами. Эти символы перечислены ниже:

_POSIX_REENTRANT_FUNCTIONS Означает, что необходимы реентерабельные функции.
_POSIX_THREADS Означает реализацию библиотеки нитей.

Проверка наличия во время выполнения

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

Ниже приведен список символьных констант, связанных со всеми необязательными компонентами. Эти символьные константы необходимо передать в функцию sysconf в параметре Name. Константы определены в файле заголовка unistd.h.

Адрес стека _SC_THREAD_ATTR_STACKADDR
Размер стека _SC_THREAD_ATTR_STACKSIZE
Планирование приоритета _SC_THREAD_PRIORITY_SCHEDULING
Наследование приоритета _SC_THREAD_PRIO_INHERIT
Защита приоритета _SC_THREAD_PRIO_PROTECT
Совместное выполнение процессов _SC_THREAD_PROCESS_SHARED

Кроме того, можно проверить наличие двух основных компонентов, вызвав функцию sysconf со следующими значениями параметра имя:

_SC_REENTRANT_FUNCTIONS Означает, что необходимы реентерабельные функции.
_SC_THREADS Означает реализацию библиотеки нитей.

Связанная информация

Основные сведения о нитях.

Глава 11, Создание программ с нитями.

Краткая справка по библиотеке работы с нитями.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]