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

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

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

БИБЛИОТЕКА

       Библиотека потоков POSIX (libpthread, -lpthread)

ОБЗОР

       #include <pthread.h>

       int pthread_attr_setstack(pthread_attr_t *attr,
                                 void stackaddr[.stacksize],
                                 size_t stacksize);
       int pthread_attr_getstack(const pthread_attr_t *restrict attr,
                                 void **restrict stackaddr,
                                 size_t *restrict stacksize);

   Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

       pthread_attr_getstack(), pthread_attr_setstack():
           _POSIX_C_SOURCE >= 200112L

ОПИСАНИЕ

       Функция pthread_attr_setstack() изменяет атрибуты адреса и размера стека в  объекте  атрибутов  нити,  на
       который  указывает  attr,  на  значения,  задаваемые  в  stackaddr  и  stacksize, соответственно. Данными
       атрибутами задаёт расположение  и  размер  стека,  который  будет  использоваться  нитью,  создаваемой  с
       использованием объекта атрибутов нити attr.

       Значение  stackaddr  должно  указывать  на  самый  младший  адресуемый  байт  буфера  из  stacksize байт,
       выделенного вызывающим. Страницы выделенного буфера должны быть доступны на чтение и запись.

       Функция pthread_attr_getstack() возвращает атрибуты адреса и размера стека  из объекта атрибутов нити, на
       который указывает attr, в буфер, на который указывает stackaddr и stacksize, соответственно.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

       При успешном выполнении эти функции возвращают 0; при ошибке возвращается ненулевой номер ошибки.

ОШИБКИ

       Функция pthread_attr_setstack() может завершиться со следующей ошибкой:

       EINVAL stacksize is less than PTHREAD_STACK_MIN (16384) bytes.  On some  systems,  this  error  may  also
              occur if stackaddr or stackaddr + stacksize is not suitably aligned.

       В  POSIX.1  также  описана ошибка EACCES, которая возникает, если область стека, определённая stackaddr и
       stacksize, недоступна вызывающему на чтение и запись.

АТРИБУТЫ

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

СТАНДАРТЫ

       POSIX.1-2008.

ИСТОРИЯ

       glibc 2.2.  POSIX.1-2001.

ПРИМЕЧАНИЯ

       Эти функции нужны приложениям, в которых  нужно  размещать  стек  в  определённом  месте.  В  большинстве
       приложений  это  не  нужно и эти функции использовать не стоит (используйте pthread_attr_setstacksize(3),
       если приложению нужно задать только размер стека, отличный от умолчательного).

       Когда приложение использует pthread_attr_setstack(), оно самостоятельно выделяет место под стек. Защитный
       размер,  задаваемый  pthread_attr_setguardsize(3),  игнорируется.  Если  его  учитывать  необходимо,   то
       приложение  должно  самостоятельно  выделять  защитную область (одну или несколько страниц, защищённых от
       чтения и записи) для обработки возможного переполнения стека.

       Адрес, указанный в stackaddr, должен быть выровнен  соответствующим  образом:  для  полной  переносимости
       выравнивайте  его по границе страницы (sysconf(_SC_PAGESIZE)). Для выделения полезно использовать функцию
       posix_memalign(3). Вероятно, значение stacksize также должно быть кратно размеру системной страницы.

       Если attr используется при создании нескольких нитей, то вызывающий должен изменять атрибут адреса  стека
       между  вызовами  pthread_create(3);  в  противном  случае  нити  будут пытаться использовать одну и ту же
       область памяти для стека и возникнет хаос.

ПРИМЕРЫ

       Смотрите pthread_attr_init(3).

СМОТРИТЕ ТАКЖЕ

       mmap(2), mprotect(2), posix_memalign(3), pthread_attr_init(3), pthread_attr_setguardsize(3),
       pthread_attr_setstackaddr(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_setstack(3)