Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       pthread_key_create,  pthread_key_delete,  pthread_setspecific,  pthread_getspecific - gestionarea datelor
       specifice firului de execuție

SINOPSIS

       #include <pthread.h>

       int pthread_key_create(pthread_key_t *key,
                              void (*destr_function) (void *));
       int pthread_key_delete(pthread_key_t key);
       int pthread_setspecific(pthread_key_t key, const void *pointer);
       void * pthread_getspecific(pthread_key_t key);

DESCRIERE

       Programele au adesea nevoie de variabile globale sau statice care au valori diferite în diferite fire  de
       execuție.  Deoarece  firele  de  execuție  împart  un  singur  spațiu de memorie, acest lucru nu poate fi
       realizat cu variabile obișnuite. Datele specifice firelor  de  execuție  reprezintă  răspunsul  POSIX  la
       această necesitate.

       Fiecare fir de execuție are un bloc de memorie privat, zona de date specifică firului de execuție sau, pe
       scurt, zona TSD. Această zonă este indexată cu ajutorul cheilor TSD. Zona TSD asociază valori de tip void
       *  cheilor TSD. Cheile TSD sunt comune tuturor firelor, dar valoarea asociată unei anumite chei TSD poate
       fi diferită în fiecare fir.

       Pentru a fi mai concreți, zonele TSD pot fi considerate ca fiind matrice de indicatori void *, cheile TSD
       ca indici întregi în aceste matrice, iar valoarea unei chei TSD  ca  valoare  a  elementului  de  matrice
       corespunzător în firul de apelare.

       Atunci când este creat un fir, zona TSD a acestuia asociază inițial NULL cu toate cheile.

       pthread_key_create alocă o nouă cheie TSD. Cheia este stocată în locația indicată de key. Există o limită
       de  PTHREAD_KEYS_MAX  pentru  numărul  de  chei alocate la un moment dat. Valoarea asociată inițial cheii
       returnate este NULL în toate firele de execuție în curs.

       Argumentul destr_function, dacă nu este NULL, specifică o funcție de distrugere asociată cu cheia. Atunci
       când un fir de execuție se termină prin pthread_exit sau prin anulare,  destr_function  este  apelată  cu
       argumentele  valorii asociate cheii în acel fir de execuție. destr_function nu este apelată dacă valoarea
       respectivă este NULL. Ordinea în care sunt apelate funcțiile de distrugere în momentul terminării firului
       nu este specificată.

       Înainte de apelarea funcției de distrugere, valoarea NULL este asociată cu  cheia  în  firul  curent.  Cu
       toate acestea, o funcție de distrugere ar putea reasocia valorile non-NULL la această cheie sau la o altă
       cheie.  Pentru  a  rezolva această problemă, dacă, după ce toți destructorii au fost apelați pentru toate
       valorile non-NULL, mai  există  încă  valori  non-NULL  cu  destructori  asociați,  procesul  se  repetă.
       Implementarea „LinuxThreads” oprește procesul după PTHREAD_DESTRUCTOR_ITERATIONS iterații, chiar dacă mai
       rămân câteva valori non-NULL cu descriptori asociați. Alte implementări pot efectua bucle la nesfârșit.

       pthread_key_delete  anulează  alocarea unei chei TSD. Nu verifică dacă există valori non-NULL asociate cu
       cheia respectivă în firele de execuție în curs de execuție și nici  nu  apelează  funcția  de  distrugere
       asociată cu cheia.

       pthread_setspecific  modifică  valoarea asociată cu key în firul de apelare, stocând în schimb pointer-ul
       dat.

       pthread_getspecific returnează valoarea asociată în prezent cu key în firul de apelare.

VALOAREA RETURNATĂ

       pthread_key_create, pthread_key_delete și pthread_setspecific returnează 0 în caz de succes și un cod  de
       eroare  diferit  de zero în caz de eșec. În caz de succes, pthread_key_create stochează cheia nou alocată
       în locația indicată de argumentul său key.

       pthread_getspecific returnează valoarea asociată cu key în caz de succes, și NULL în caz de eroare.

ERORI-IEȘIRE

       În caz de eroare, pthread_key_create returnează următorul cod de eroare:

              EAGAIN Cheile PTHREAD_KEYS_MAX sunt deja alocate.

       În caz de eroare, pthread_key_delete și pthread_setspecific returnează următorul cod de eroare:

              EINVAL key nu este o cheie TSD validă, alocată.

       pthread_getspecific returnează NULL dacă key nu este o cheie TSD validă, alocată.

CONSULTAȚI ȘI

       pthread_create(3), pthread_exit(3), pthread_testcancel(3).

EXEMPLU

       Următorul fragment de cod alocă o  matrice  de  100  de  caractere  specifică  firului  de  execuție,  cu
       recuperare automată la ieșirea din fir:

              /* Cheia pentru memoria tampon specifică firului */ static pthread_key_t buffer_key;  /* O singură inițializare a cheii */ static pthread_once_t buffer_key_once = PTHREAD_ONCE_INIT;  /* Alocarea memoriei tampon specifice firului */ void buffer_alloc(void) {   pthread_once(&buffer_key_once, buffer_key_alloc);   pthread_setspecific(buffer_key, malloc(100)); }  /* Returnează memoria tampon specifică firului */ char * get_buffer(void) {   return (char *) pthread_getspecific(buffer_key); }  /* Alocarea cheii */ static void buffer_key_alloc() {   pthread_key_create(&buffer_key, buffer_destroy); }  /* Eliberează memoria tampon specifică firului */ static void buffer_destroy(void * buf) {   free(buf); }

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.

Pagini de manual de Linux 6.9.1                   16 iunie 2024                            pthread_key_create(3)