Man page - pthread_attr_setstack(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

pthread_attr_setstack

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

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

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).

Image grohtml-630951-1.png

СТАНДАРТЫ

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 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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