| pthread_setcancelstate(3) | Library Functions Manual | pthread_setcancelstate(3) |
pthread_setcancelstate, pthread_setcanceltype - stabilește starea și tipul anulabilității
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)
#include <pthread.h>
int pthread_setcancelstate(int state, int *oldstate); int pthread_setcanceltype(int type, int *oldtype);
pthread_setcancelstate() stabilește starea de anulabilitate a firului apelant la valoarea indicată în state. Starea anterioară de anulare a firului este returnată în memoria tampon indicată de oldstate. Argumentul state trebuie să aibă una dintre următoarele valori:
pthread_setcanceltype() stabilește tipul de anulabilitate al firului apelant la valoarea indicată în type. Tipul anterior de anulabilitate al firului este returnat în memoria tampon indicată de oldtype. Argumentul type trebuie să aibă una dintre următoarele valori:
Operația „set-and-get” efectuată de fiecare dintre aceste funcții este atomică în ceea ce privește alte fire din proces care apelează la aceeași funcție.
În caz de succes, aceste funcții returnează 0; în caz de eroare, ele returnează un număr de eroare diferit de zero.
pthread_setcancelstate() poate eșua cu următoarea eroare:
pthread_setcanceltype() poate eșua cu următoarea eroare:
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
| Interfață | Atribut | Valoare |
| pthread_setcancelstate(), pthread_setcanceltype() | Siguranța firelor | MT-Safe |
| pthread_setcancelstate(), pthread_setcanceltype() | Async-cancel safety | AC-Safe |
POSIX.1-2008.
glibc 2.0 POSIX.1-2001.
Pentru detalii despre ce se întâmplă atunci când un fir este anulat, consultați pthread_cancel(3).
Dezactivarea pentru scurt timp a capacității de anulare este utilă în cazul în care un fir de execuție efectuează o acțiune critică care nu trebuie întreruptă de o cerere de anulare. Atenție la dezactivarea capacității de anulare pentru perioade lungi de timp sau în jurul unor operații care se pot bloca pentru perioade lungi de timp, deoarece acest lucru va face ca firul să nu răspundă la cererile de anulare.
Stabilirea tipului de anulare la PTHREAD_CANCEL_ASYNCHRONOUS este rareori utilă. Deoarece firul poate fi anulat în orice moment, acesta nu poate rezerva resurse în siguranță (de exemplu, alocarea de memorie cu malloc(3)), nu poate achiziționa mutex-uri, semafoare sau blocaje și așa mai departe. Rezervarea resurselor este nesigură deoarece aplicația nu are cum să știe care este starea acestor resurse atunci când firul este anulat; adică, anularea a avut loc înainte ca resursele să fie rezervate, în timp ce erau rezervate sau după ce au fost eliberate? În plus, unele structuri interne de date (de exemplu, lista legată a blocurilor libere gestionată de familia de funcții malloc(3)) poate fi lăsată într-o stare inconsistentă dacă anularea are loc în mijlocul apelului funcției. În consecință, gestionarii de curățare încetează să mai fie utili.
Funcțiile care pot fi anulate în mod sigur în mod asincron sunt denumite funcții asincrone de anulare sigură (async-cancel-safe). POSIX.1-2001 și POSIX.1-2008 cer doar ca pthread_cancel(3), pthread_setcancelstate() și pthread_setcanceltype() să fie async-cancel-safe. În general, alte funcții de bibliotecă nu pot fi apelate în siguranță de la un fir de execuție cu anulare asincronă.
Una dintre puținele circumstanțe în care anularea asincronă este utilă este anularea unui fir care se află într-o buclă legată pur de calcul.
Implementările threading Linux permit ca argumentul oldstate din pthread_setcancelstate() să fie NULL, caz în care informațiile despre starea anterioară de anulare nu sunt returnate apelantului. Multe alte implementări permit, de asemenea, un argument oldstat NULL, dar POSIX.1 nu specifică acest punct, astfel încât aplicațiile portabile ar trebui să specifice întotdeauna o valoare non-NULL în oldstate. Un set exact analog de declarații se aplică pentru argumentul oldtype al pthread_setcanceltype().
Consultați pthread_cancel(3).
pthread_cancel(3), pthread_cleanup_push(3), pthread_testcancel(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.
| 2 mai 2024 | Pagini de manual de Linux 6.9.1 |