pthread_setcancelstate(3)

NUME
pthread_setcancelstate, pthread_setcanceltype - stabilește starea și tipul anulabilității

BIBLIOTECA
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)

SINOPSIS
#include <pthread.h>

int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldtype);

DESCRIERE
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_CANCEL_ENABLE
    Firul este anulabil. Aceasta este starea implicită de anulare în toate firele noi, inclusiv în firul inițial. Tipul de anulabilitate al firului determină momentul în care un fir anulabil va răspunde la o cerere de anulare.

PTHREAD_CANCEL_DISABLE
    Firul nu este anulabil. Dacă se primește o cerere de anulare, acesta este blocat până la activarea posibilității de anulare.

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:

PTHREAD_CANCEL_DEFERRED
    O cerere de anulare este amânată până când firul următor apelează o funcție care este un punct de anulare (a se vedea pthreads(7)). Acesta este tipul implicit de anulare în toate firele noi, inclusiv în firul inițial.

    Chiar și în cazul anulării amânate, un punct de anulare dintr-un gestionar de semnal asincron poate fi totuși luat în considerare, iar efectul este ca și cum ar fi fost o anulare asincronă.

PTHREAD_CANCEL_ASYNCHRONOUS
    Firul poate fi anulat în orice moment; (în mod normal, acesta va fi anulat imediat după primirea unei cereri de anulare, dar sistemul nu garantează acest lucru).

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.

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_setcancelstate() poate eșua cu următoarea eroare:

EINVAL
    Valoare nevalidă pentru state.

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

EINVAL
    Valoare nevalidă pentru type.

ATRIBUTE
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

STANDARDE
POSIX.1-2008.

ISTORIC
glibc 2.0 POSIX.1-2001.

NOTE
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.

  Anulabilitate asincronă
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.

  Note privind portabilitatea
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().

EXEMPLE
Consultați pthread_cancel(3).

CONSULTAȚI ȘI
pthread_cancel(3), pthread_cleanup_push(3), pthread_testcancel(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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.