set_tid_address(2)

NUME
set_tid_address - definește indicatorul la ID-ul firului de execuție

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <sys/syscall.h>      /* Definirea constantelor SYS_* */
#include <unistd.h>

pid_t syscall(SYS_set_tid_address, int *tidptr);

Notă: glibc nu oferă nicio funcție învăluitoare pentru set_tid_address(), fiind necesară utilizarea syscall(2).

DESCRIERE
Pentru fiecare fir, nucleul păstrează două atribute (adrese) numite set_child_tid și clear_child_tid. Aceste două atribute conțin în mod implicit valoarea NULL.

set_child_tid
    În cazul în care un fir de execuție este inițiat utilizând clone(2) cu indicatorul CLONE_CHILD_SETTID, set_child_tid este definit la valoarea transmisă în argumentul ctid al acestui apel de sistem.

    Atunci când set_child_tid este definit, primul lucru pe care îl face noul fir de execuție este să își scrie ID-ul firului de execuție la această adresă.

clear_child_tid
    Dacă un fir de execuție este inițiat utilizând clone(2) cu indicatorul CLONE_CHILD_CLEARTID, clear_child_tid este definit la valoarea transmisă în argumentul ctid al acelui apel de sistem.

Apelul de sistem set_tid_address() stabilește valoarea clear_child_tid pentru firul apelant la tidptr.

Atunci când se termină un fir de execuție al cărui clear_child_tid nu este NULL, atunci, dacă firul de execuție împarte memoria cu alte fire de execuție, atunci se scrie 0 la adresa specificată în clear_child_tid, iar nucleul efectuează următoarea operație:

    futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);

Efectul acestei operații este de a trezi un singur fir care efectuează o așteptare „futex” la locația din memorie. Erorile din operația de trezire „futex” sunt ignorate.

VALOAREA RETURNATĂ
set_tid_address() returnează întotdeauna ID-ul firului de execuție al apelantului.

ERORI
set_tid_address() reușește întotdeauna.

STANDARDE
Linux.

ISTORIC
Linux 2.5.48.

Detaliile prezentate aici sunt valabile începând cu Linux 2.5.49.

CONSULTAȚI ȘI
clone(2), futex(2), gettid(2)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată 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.