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

НАИМЕНОВАНИЕ
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)