get_robust_list(2) | System Calls Manual | get_robust_list(2) |
NUME
get_robust_list, set_robust_list - obține/stabilește lista de futex-uri robuste
BIBLIOTECA
Biblioteca C standard (libc, -lc)
SINOPSIS
#include <linux/futex.h> /* Definiția lui struct robust_list_head */ #include <sys/syscall.h> /* Definirea constantelor SYS_* */ #include <unistd.h>
long syscall(SYS_get_robust_list, int pid, struct robust_list_head **head_ptr, size_t *len_ptr); long syscall(SYS_set_robust_list, struct robust_list_head *head, size_t len);
Notă: Nu există nicio funcție învăluitoare (wrapper) glibc pentru aceste apeluri de sistem astfel că este necesară utilizarea a syscall(2).
DESCRIERE
Aceste apeluri de sistem se ocupă de listele futex robuste pentru fiecare fir. Aceste liste sunt gestionate în spațiul utilizatorului: nucleul știe doar despre locația antetului listei. Un fir de execuție poate informa nucleul cu privire la locația listei sale de futex-uri robuste folosind set_robust_list(). Adresa listei de futex-uri robuste a unui fir de execuție poate fi obținută folosind get_robust_list().
Scopul listei robuste de futex este de a se asigura că, în cazul în care un fir nu reușește din greșeală să deblocheze un futex înainte de a se termina sau de a apela execve(2), un alt fir care așteaptă acel futex este notificat că fostul proprietar al futexului a murit. Această notificare constă în două părți: bitul FUTEX_OWNER_DIED este activat în cuvântul futex, iar nucleul efectuează o operație futex(2) FUTEX_WAKE pe unul dintre firele care așteaptă futex-ul.
Apelul de sistem get_robust_list() returnează antetul listei futex robustă a firului al cărui ID de fir este specificat în pid. Dacă pid este 0, se returnează antetul listei pentru firul apelant. Antetul listei este stocat în locația indicată de head_ptr. Dimensiunea obiectului indicat de **head_ptr este stocată în len_ptr.
Permisiunea de a utiliza get_robust_list() este guvernată de o verificare a modului de acces ptrace PTRACE_MODE_READ_REALCREDS; a se vedea ptrace(2).
Apelul de sistem set_robust_list() solicită nucleului să înregistreze antetul listei de futex-uri robuste deținute de firul apelant. Argumentul head este antetul listei care trebuie înregistrat. Argumentul len trebuie să fie sizeof(*head).
VALOAREA RETURNATĂ
Apelurile de sistem set_robust_list() și get_robust_list() returnează zero atunci când operațiunea este reușită, iar în caz contrar un cod de eroare.
ERORI-IEȘIRE
Apelul de sistem set_robust_list() poate eșua cu următoarea eroare:
- EINVAL
- len nu este egal cu sizeof(struct robust_list_head).
Apelul de sistem get_robust_list() poate eșua cu următoarele erori:
VERSIUNI
Aceste apeluri de sistem au fost adăugate în Linux 2.6.17.
NOTE
Aceste apeluri de sistem nu sunt necesare pentru aplicațiile normale.
Un fir de execuție poate avea doar o singură listă de futex-uri robuste; prin urmare, aplicațiile care doresc să utilizeze această funcționalitate ar trebui să folosească mutex-urile robuste furnizate de glibc.
În implementarea inițială, un fir de execuție care aștepta un futex era notificat că proprietarul acestuia a murit numai dacă proprietarul se termina. Începând cu Linux 2.6.28, notificarea a fost extinsă pentru a include cazul în care proprietarul efectuează un execve(2).
ID-urile de fire menționate în textul principal sunt ID-uri de fire kernel de tipul celor returnate de clone(2) și gettid(2).
CONSULTAȚI ȘI
futex(2), pthread_mutexattr_setrobust(3)
Documentation/robust-futexes.txt și Documentation/robust-futex-ABI.txt în arborele sursă al nucleului Linux
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 |