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.

VERSIUNI
Acest apel este prezent începând cu Linux 2.5.48. Detaliile prezentate aici sunt valabile începând cu Linux 2.5.49.

STANDARDE
Acest apel de sistem este specific pentru Linux.

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.