set_tid_address(2) | System Calls Manual | set_tid_address(2) |
NUME
set_tid_address - definește indicatorul la ID-ul firului de execuție
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#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-IEȘIRE
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
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.
2 mai 2024 | Pagini de manual de Linux 6.8 |