.\" -*- coding: UTF-8 -*-
.\" This manpage has been automatically generated by docbook2man
.\" from a DocBook document. This tool can be found at:
.\"
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
.\"
.\" SPDX-License-Identifier: MIT
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH futex 7 "30 octombrie 2022" "Pagini de manual de Linux 6.05.01"
.SH NUME
futex \- futex \- blocare rapidă în spațiul utilizatorului
.SH REZUMAT
.nf
\fB#include \fP
.fi
.SH DESCRIERE
Nucleul Linux oferă futexes („Fast user\-space mutexes”, mutex\-uri rapide în
spațiul utilizatorului) ca element de bază pentru blocarea rapidă în spațiul
utilizatorului și pentru semafoare. Futex\-urile sunt foarte simple și se
pretează foarte bine la construirea unor abstracțiuni de blocare de nivel
superior, cum ar fi mutex\-urile, variabilele de condiție, blocările de
citire\-scriere, barierele și semafoarele.
.PP
De fapt, majoritatea programatorilor nu vor utiliza direct futexurile, ci se
vor baza pe bibliotecile de sistem construite pe acestea, cum ar fi
biblioteca nativă POSIX pentru fire de execuție („Native POSIX Thread
Library”: NPTL) (a se vedea \fBpthreads\fP(7)).
.PP
Un futex este identificat de o bucată de memorie care poate fi partajată
între procese sau fire de execuție. În aceste procese diferite, nu este
necesar ca futex\-ul să aibă adrese identice. În forma sa simplă, un futex
are o semantică de semaforizare; este un contor care poate fi incrementat și
decrementat atomic; procesele pot aștepta ca valoarea să devină pozitivă.
.PP
Operația futex are loc în întregime în spațiul utilizatorului în cazul în
care nu apare nicio dispută. Nucleul este implicat doar pentru a arbitra
cazul disputat. Deoarece orice proiectare sănătoasă va urmări să nu existe
o dispută, futex\-urile sunt, de asemenea, optimizate pentru această
situație.
.PP
În forma sa simplă, un futex este un număr întreg aliniat care este atins
doar de instrucțiunile de asamblare atomică. Acest număr întreg are o
lungime de patru octeți pe toate platformele. Procesele pot partaja acest
număr întreg folosind \fBmmap\fP(2), prin intermediul segmentelor de memorie
partajată sau pentru că împart spațiul de memorie, caz în care aplicația se
numește în mod obișnuit multifir „multithreaded”.
.SS Semantică
Orice operație futex începe în spațiul utilizatorului, dar poate fi necesar
să se comunice cu nucleul folosind apelul de sistem \fBfutex\fP(2).
.PP
Pentru a „urca” (up) un futex, executați instrucțiunile de asamblare
corespunzătoare care vor determina CPU\-ul gazdă să incrementeze atomic
numărul întreg. Ulterior, verificați dacă acesta s\-a schimbat de fapt de la
0 la 1, caz în care nu au existat așteptări și operațiunea este gata.
Acesta este cazul fără dispută, care este rapid și ar trebui să fie
obișnuit.
.PP
În cazul în care există dispută, creșterea atomică a schimbat contorul de la
\-1 (sau un alt număr negativ). Dacă acest lucru este detectat, există
așteptări. Spațiul utilizatorului ar trebui acum să fixeze contorul la 1 și
să ceară nucleului să trezească orice așteptări folosind operația
\fBFUTEX_WAKE\fP.
.PP
Așteptarea unui futex, pentru a\-l „coborî” (down), este operația inversă.
Se descrește atomic contorul și se verifică dacă acesta s\-a schimbat la 0,
caz în care operația este efectuată, iar futex\-ul nu a fost disputat. În
toate celelalte circumstanțe, procesul ar trebui să fixeze contorul la \-1 și
să ceară nucleului să aștepte ca un alt proces să urce futex\-ul. Acest
lucru se face folosind operația \fBFUTEX_WAIT\fP.
.PP
Apelului de sistem \fBfutex\fP(2) i se poate transmite opțional un temporizator
care să specifice cât timp trebuie să aștepte nucleul pentru ca futex\-ul să
fie ridicat. În acest caz, semantica este mai complexă, iar programatorul
este trimis la \fBfutex\fP(2) pentru mai multe detalii. Același lucru este
valabil și pentru așteptarea asincronă a futex\-ului.
.SH VERSIUNI
Suportul inițial pentru futex a fost integrat în Linux 2.5.7, dar cu o
semantică diferită de cea descrisă mai sus. Semantica actuală este
disponibilă de la Linux 2.5.40 încoace.
.SH NOTE
Pentru a reitera, futex\-urile goale nu sunt concepute ca o abstracție ușor
de utilizat pentru utilizatorii finali. Se așteaptă ca cei care
implementează să aibă cunoștințe de asamblare și să fi citit sursele
bibliotecii futex din spațiul utilizatorului la care se face referire mai
jos.
.PP
.\" .SH AUTHORS
.\" .PP
.\" Futexes were designed and worked on by Hubertus Franke
.\" (IBM Thomas J. Watson Research Center),
.\" Matthew Kirkwood, Ingo Molnar (Red Hat) and
.\" Rusty Russell (IBM Linux Technology Center).
.\" This page written by bert hubert.
Această pagină de manual ilustrează cea mai frecventă utilizare a
primitivelor \fBfutex\fP(2); nu este în niciun caz singura.
.SH "CONSULTAȚI ȘI"
\fBclone\fP(2), \fBfutex\fP(2), \fBget_robust_list\fP(2), \fBset_robust_list\fP(2),
\fBset_tid_address\fP(2), \fBpthreads\fP(7)
.PP
\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (lucrările de
la Ottawa Linux Symposium 2002), biblioteca de exemple futex,
futex\-*.tar.bz2
.UR https://mirrors.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
.UE .
.PP
.SH TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de
Remus-Gabriel Chelu
.
.PP
Această traducere este documentație gratuită; citiți
.UR https://www.gnu.org/licenses/gpl-3.0.html
Licența publică generală GNU Versiunea 3
.UE
sau o versiune ulterioară cu privire la condiții privind drepturile de autor.
NU se asumă NICIO RESPONSABILITATE.
.PP
Dacă găsiți erori în traducerea acestui manual,
vă rugăm să trimiteți un e-mail la
.MT translation-team-ro@lists.sourceforge.net
.ME .