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

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


Расширенные атрибуты

В данном разделе описаны расширенные атрибуты нитей, взаимных блокировок и переменных условий. Реализация этих атрибутов необязательна; она определяется опциями POSIX. Более подробная информация об этом приведена в разделе Необязательные компоненты библиотеки работы с нитями.

Дополнительные сведения о расширенных атрибутах приведены в следующих разделах:

Атрибуты стека

Каждой нити выделяется стек. Управление стеком в разных реализациях различно. Таким образом, приведенная ниже информация применима только к AIX, хотя подобные функции могут существовать и в других системах.

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

Размер стека

В системе AIX определен атрибут stacksize. Его значение зависит от Необязательный компонент POSIX - размер стека; это нестандартная опция, которая может быть не реализована в системах других фирм.

Атрибут stacksize задает минимальный размер стека, выделяемого для нити. Функция pthread_attr_getstacksize возвращает значение этого атрибута, а функция pthread_attr_setstacksize позволяет изменять его значение.

Атрибут stacksize определяет размер выделяемого стека следующим образом:

В библиотеке поддержки нитей AIX для каждой новой нити выделяется блок данных, называемый пользовательской областью нити. Размер этого блока всегда кратен 4 Кб. Он состоит из следующих компонентов:

Примечание: необходимо различать пользовательскую область нити, описанную здесь, и структуру uthread, применяемую в ядре AIX. Пользовательская область нити доступна только в пользовательском режиме и управляет ей исключительно библиотека нитей, в то время как структура uthread существует только в среде ядра.

Адрес стека

Атрибут stackaddr в системе AIX не определен. Его значение зависит от Необязательный компонент POSIX - адрес стека; эта опция не реализована в AIX, но может быть реализована в других системах.

Атрибут stackaddr задает адрес стека, выделяемого нити. Функция pthread_attr_getstackaddr возвращает значение этого атрибута, а функция pthread_attr_setstackaddr позволяет задать его значение.

Если адрес не указан, то нити выделяется стек с произвольным адресом. Узнать этот адрес нельзя, но его значение никогда не требуется для работы. Если же вам потребуется определить стек по конкретному адресу, то вы можете воспользоваться атрибутом stackaddr. Например, если нужен стек очень большого размера, вы можете указать для него адрес из свободного сегмента.

Если адрес стека был указан при вызове функции pthread_create, то система попытается выделить стек по этому адресу. Если сделать это невозможно, то функция pthread_create вернет значение EINVAL. Функция pthread_attr_setstackaddr возвращает ошибку только в том случае, если указанный адрес стека не попадает в адресное пространство, так как в этом случае стек не выделяется.

Совместное выполнение процессов

В большинстве систем UNIX допускается использование несколькими процессами одного пространства данных, называемого общей памятью. В AIX тоже предусмотрена эта возможность. Сведения о средствах работы с общей памятью AIX приведены в разделе Отображение памяти - Основные сведения. Атрибуты совместного выполнения процессов, задаваемые для переменных условий и взаимных блокировок, позволяют размещать эти объекты в общей памяти для синхронизации нитей различных процессов. Однако стандартного интерфейса управления общей памятью не существует, поэтому опция совместного выполнения процессов POSIX не реализована в библиотеке нитей AIX.

Рекомендации по созданию программ с нитями.

Дополнительные функции работы с нитями.

Разовая инициализация.

Данные нитей.

Создание сложных объектов синхронизации.

Список дополнительных функций для работы с нитями.

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


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