Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       pthread_attr_setguardsize,  pthread_attr_getguardsize  -  изменяет/возвращает  атрибут  размера  защиты у
       объекта атрибутов нити

БИБЛИОТЕКА

       Библиотека потоков POSIX (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 эти функции всегда
       выполняются успешно (тем не  менее,  в  переносимых  приложениях  нужно  учитывать  возможность  возврата
       ошибки).

АТРИБУТЫ

       Описание терминов данного раздела смотрите в attributes(7).
       ┌─────────────────────────────────────────────────────────────────────┬──────────────────────┬──────────┐
       │ ИнтерфейсАтрибутЗначение │
       ├─────────────────────────────────────────────────────────────────────┼──────────────────────┼──────────┤
       │ pthread_attr_setguardsize(), pthread_attr_getguardsize()            │ Безвредность в нитях │ MT-Safe  │
       └─────────────────────────────────────────────────────────────────────┴──────────────────────┴──────────┘

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       glibc 2.1.  POSIX.1-2001.

ПРИМЕЧАНИЯ

       Защитная  область  состоит  из страниц виртуальной памяти, которые защищены от чтения и записи. Если нить
       переполнит свой стек и попадёт в защитную область, то на большинстве аппаратных  архитектур  она  получит
       сигнал  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>,       Darima       Kogan
       <silverdk99@gmail.com>,  Max  Is  <ismax799@gmail.com>,  Yuri  Kozlov  <yuray@komyakino.ru>,  Иван Павлов
       <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                     pthread_attr_setguardsize(3)