table of contents
pthread_attr_setstack(3) | Library Functions Manual | pthread_attr_setstack(3) |
NUME¶
pthread_attr_setstack, pthread_attr_getstack - stabilește/obține atributele stivei în obiectul de atribute ale firului de execuție
BIBLIOTECA¶
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)
SINOPSIS¶
#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);
pthread_attr_getstack(), pthread_attr_setstack():
_POSIX_C_SOURCE >= 200112L
DESCRIERE¶
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.
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¶
pthread_attr_setstack() poate eșua cu următoarea eroare:
- 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 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.
ATRIBUTE¶
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 |
STANDARDE¶
POSIX.1-2008.
ISTORIC¶
glibc 2.2. POSIX.1-2001.
NOTE¶
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.
EXEMPLE¶
A se vedea pthread_attr_init(3).
CONSULTAȚI ȘI¶
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)
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 Linux (nepublicate) |