Provided by: manpages-ru-dev_4.21.0-2_all 

ИМЯ
pthread_attr_setguardsize, pthread_attr_getguardsize - изменяет/возвращает атрибут размера защиты у
объекта атрибутов нити
LIBRARY
POSIX threads library (libpthread, -lpthread)
СИНТАКСИС
#include <pthread.h>
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,
size_t *restrict guardsize);
ОПИСАНИЕ
Функция pthread_attr_setguardsize() изменяет атрибут размера защиты у объекта атрибутов нити, на который
указывает attr, в значение guardsize.
Если guardsize больше 0, то для каждой новой нити, созданной с использованием атрибута attr, система
выделяет дополнительную область не менее guardsize байт в конце стека нити, которая служит как защитная
область стека (но смотрите ДЕФЕКТЫ).
Если guardsize равно 0, то новые нити, создаваемые с использованием attr, не будут иметь защитной
области.
Размер защиты по умолчанию совпадает с размером системной страницы.
Если в attr установлен атрибут адреса стека (с помощью pthread_attr_setstack(3) или
pthread_attr_setstackaddr(3)), означающий, что вызывающий выделяет стек для нити, то атрибут размера
защиты игнорируется (т. е., система не создаёт защитную область): само приложение должно обрабатывать
переполнение стека (возможно, с помощью mprotect(2), для задания защитной области в конце выделенного
стека).
Функция pthread_attr_getguardsize() возвращает атрибут размера защиты у объекта атрибутов нити, на
который указывает attr, в буфер на который указывает guardsize.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении эти функции возвращают 0; при ошибке возвращается ненулевой номер ошибки.
ОШИБКИ
В POSIX.1 описана ошибка EINVAL при некорректном значении attr или guardsize. В Linux эти функции всегда
выполняются успешно (тем не менее, в переносимых приложениях нужно учитывать возможность возврата
ошибки).
ВЕРСИИ
These functions are provided since glibc 2.1.
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
│ Интерфейс │ Атрибут │ Значение │
├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
│ pthread_attr_setguardsize(), pthread_attr_getguardsize() │ Безвредность в нитях │ MT-Safe │
└─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘
СТАНДАРТЫ
POSIX.1-2001, POSIX.1-2008.
ЗАМЕЧАНИЯ
Защитная область состоит из страниц виртуальной памяти, которые защищены от чтения и записи. Если нить
переполнит свой стек и попадёт в защитную область, то на большинстве аппаратных архитектур она получит
сигнал SIGSEGV и таким образом узнает о переполнении. Защитные области начинаются на границах страниц, а
размер защиты внутри округляется до размера системной страницы при создании нити (тем не менее, функция
pthread_attr_getguardsize() возвращает размер защиты, установленный pthread_attr_setguardsize()).
Установка размера защиты в нулевое значение полезно для экономии памяти в приложениях, которые создают
много нитей и знают, что переполнение стека никогда не произойдёт.
Указание размера защиты больше чем размер по умолчанию может потребоваться для обнаружения переполнений
стека при выделении в нити больших структур данных в стеке.
ДЕФЕКТЫ
В glibc 2.8 реализация нитей NPTL добавляет защитную область к размеру выделяемого стека, а не выделяет
дополнительное пространство в конце стека как требуется POSIX.1 (это может приводить к ошибке EINVAL в
pthread_create(3), если значение размера защиты слишком большое и не оставляет место именно под стек).
Устаревшая реализация LinuxThreads делает это правильно, выделяя дополнительное пространство в конце
стека под защитную область.
ПРИМЕРЫ
См. pthread_getattr_np(3).
СМ. ТАКЖЕ
mmap(2), mprotect(2), pthread_attr_init(3), pthread_attr_setstack(3), pthread_attr_setstacksize(3),
pthread_create(3), pthreads(7)
ПЕРЕВОД
Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>,
kogamatranslator49 <r.podarov@yandex.ru>, Kogan, Max Is <ismax799@gmail.com>, Yuri Kozlov
<yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо
на man-pages-ru-talks@lists.sourceforge.net.
Linux man-pages 6.03 15 декабря 2022 г. pthread_attr_setguardsize(3)