pthread_attr_setstack(3) Library Functions Manual pthread_attr_setstack(3)

pthread_attr_setstack, pthread_attr_getstack - stabilește/obține atributele stivei în obiectul de atribute ale firului de execuție

Biblioteca de fire de execuție 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);
Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

pthread_attr_getstack(), pthread_attr_setstack():

    _POSIX_C_SOURCE >= 200112L

Funcția pthread_attr_attr_setstack() stabilește atributele adresa stivei și dimensiunea stivei ale obiectului de atribute ale firului de execuție la care face referire attr la valorile specificate în stackaddr și, respectiv, stacksize. Aceste atribute specifică locația și dimensiunea stivei care ar trebui să fie utilizate de un fir care este creat cu ajutorul obiectului de atribute ale firului attr.

stackaddr trebuie să indice cel mai mic octet adresabil dintr-o memorie tampon de stacksize octeți care a fost alocată de către apelant. Paginile din memoria tampon alocată trebuie să poată fi atât citite, cât și scrise.

Funcția pthread_attr_getstack() returnează atributele de adresă de stivă și de dimensiune a stivei ale obiectului de atribute ale firului de execuție la care se face referire prin attr în memoriile tampon indicate de stackaddr și, respectiv, stacksize.

În caz de succes, aceste funcții returnează 0; în caz de eroare, ele returnează un număr de eroare diferit de zero.

pthread_attr_setstack() poate eșua cu următoarea eroare:

stacksize este mai mică decât PTHREAD_STACK_MIN (16384) bytes. Pe unele sisteme, această eroare poate apărea, de asemenea, dacă stackaddr sau stackaddr + stacksize nu este aliniată în mod corespunzător.

POSIX.1 documentează, de asemenea, o eroare EACCES în cazul în care zona de stivă descrisă de stackaddr și stacksize nu poate fi atât citită, cât și scrisă de către apelant.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
pthread_attr_setstack(), pthread_attr_getstack() Siguranța firelor MT-Safe

POSIX.1-2008.

glibc 2.2. POSIX.1-2001.

Aceste funcții sunt furnizate pentru aplicațiile care trebuie să se asigure că stiva unui fir de execuție este plasată într-o anumită locație. Pentru majoritatea aplicațiilor, acest lucru nu este necesar, iar utilizarea acestor funcții ar trebui evitată (utilizați pthread_attr_setstacksize(3) dacă o aplicație necesită pur și simplu o dimensiune a stivei diferită de cea implicită).

Atunci când o aplicație utilizează pthread_attr_setstack(), aceasta preia responsabilitatea alocării stivei. Orice valoare a mărimii de gardă care a fost stabilită cu ajutorul pthread_attr_setguardsize(3) este ignorată. În cazul în care se consideră necesar, este responsabilitatea aplicației să aloce o zonă de gardă (una sau mai multe pagini protejate împotriva citirii și scrierii) pentru a gestiona posibilitatea de depășire a stivei.

Adresa specificată în stackaddr ar trebui să fie aliniată în mod corespunzător: pentru o portabilitate completă, aliniați-o pe o limită de pagină (sysconf(_SC_PAGESIZE)). posix_memalign(3) poate fi utilă pentru alocare. Probabil, stacksize ar trebui să fie, de asemenea, un multiplu al dimensiunii paginii de sistem.

Dacă attr este utilizat pentru a crea mai multe fire de execuție, atunci apelantul trebuie să schimbe atributul adresei stivei între apelurile la pthread_create(3); în caz contrar, firele de execuție vor încerca să utilizeze aceeași zonă de memorie pentru stivele lor, ceea ce va duce la haos.

A se vedea 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)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06