pthread_attr_setguardsize(3) | Library Functions Manual | pthread_attr_setguardsize(3) |
NUME
pthread_attr_setguardsize, pthread_attr_getguardsize - stabilește/obține atributul de dimensiune a gărzii în obiectul atributele firului de execuție
BIBLIOTECA
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)
SINOPSIS
#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);
DESCRIERE
Funcția pthread_attr_setguardsize() stabilește atributul „guard size” (dimensiune a gărzii) al obiectului de atribute ale firelor la care face referire attr la valoarea specificată în guardsize.
Dacă guardsize este mai mare decât 0, atunci pentru fiecare fir nou creat folosind attr, sistemul alocă o regiune suplimentară de cel puțin guardsize octeți la sfârșitul stivei firului pentru a acționa ca zonă de gardă pentru stivă (a se vedea însă secțiunea ERORI).
Dacă guardsize este 0, atunci firele noi create cu attr nu vor avea o zonă de gardă.
Dimensiunea implicită a gărzii este aceeași cu dimensiunea paginii sistemului.
Dacă atributul adresei stivei a fost stabilit în attr (utilizând pthread_attr_setstack(3) sau pthread_attr_setstackaddr(3)), ceea ce înseamnă că apelantul alocă stiva firului, atunci atributul dimensiunii gărzii este ignorat (de exemplu, pthread_attr_setstackaddr(3)), sistemul nu creează nicio zonă de gardă): este responsabilitatea aplicației să gestioneze depășirea stivei (poate prin utilizarea mprotect(2) pentru a defini manual o zonă de gardă la capătul stivei pe care a alocat-o).
Funcția pthread_attr_getguardsize() returnează atributul "guard size" al obiectului atribute ale firului de execuție la care se face referire prin attr în memoria tampon indicată de guardsize..
VALOAREA RETURNATĂ
În caz de succes, aceste funcții returnează 0; în caz de eroare, ele returnează un număr de eroare diferit de zero.
ERORI-IEȘIRE
POSIX.1 documentează o eroare EINVAL în cazul în care attr sau guardsize nu este validă. În Linux, aceste funcții reușesc întotdeauna (dar aplicațiile portabile și pregătite pentru viitor ar trebui totuși să se ocupe de o posibilă returnare de eroare).
ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
pthread_attr_setguardsize(), pthread_attr_getguardsize() | Siguranța firelor | MT-Safe |
STANDARDE
POSIX.1-2008.
ISTORIC
glibc 2.1. POSIX.1-2001.
NOTE
O zonă de gardă constă în pagini de memorie virtuală care sunt protejate pentru a împiedica accesul la citire și scriere. În cazul în care un fir de execuție își depășește stiva în zona de gardă, atunci, pe majoritatea arhitecturilor, primește un semnal SIGSEGV, fiind astfel notificat de depășire. Zonele de gardă încep la limitele paginilor, iar dimensiunea zonei de gardă este rotunjită în mod intern la dimensiunea paginii sistemului la crearea unui fir; (cu toate acestea, pthread_attr_getguardsize() returnează dimensiunea de gardă care a fost setată de pthread_attr_setguardsize().).
Stabilirea unei dimensiuni de gardă de 0 poate fi utilă pentru a economisi memorie într-o aplicație care creează multe fire de execuție și știe că nu se poate produce niciodată o depășire a stivei.
Alegerea unei dimensiuni de gardă mai mari decât dimensiunea implicită poate fi necesară pentru detectarea depășirilor de stivă în cazul în care un fir alocă structuri de date mari pe stivă.
ERORI
Ca și în glibc 2.8, implementarea NPTL threading include zona de gardă în cadrul alocării dimensiunii stivei, în loc să aloce spațiu suplimentar la sfârșitul stivei, așa cum prevede POSIX.1; (acest lucru poate avea ca rezultat o eroare EINVAL de la pthread_create(3) dacă valoarea dimensiunii de gardă este prea mare, nefiind lăsat spațiu pentru stiva propriu-zisă).
Implementarea învechită a LinuxThreads a făcut ceea ce trebuia, alocând spațiu suplimentar la sfârșitul stivei pentru zona de gardă.
EXEMPLE
A se vedea pthread_getattr_np(3).
CONSULTAȚI ȘI
mmap(2), mprotect(2), pthread_attr_init(3), pthread_attr_setstack(3), pthread_attr_setstacksize(3), pthread_create(3), pthreads(7)
TRADUCERE
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.
2 mai 2024 | Pagini de manual de Linux 6.8 |