Provided by: manpages-ro_4.21.0-2_all bug

NUME

       futex - futex - blocare rapidă în spațiul utilizatorului

REZUMAT

       #include <linux/futex.h>

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.

       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 pthreads(7)).

       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ă.

       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.

       Î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 mmap(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”.

   Semantică
       Orice  operație  futex  începe  în spațiul utilizatorului, dar poate fi necesar să se comunice cu nucleul
       folosind apelul de sistem futex(2).

       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.

       Î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 FUTEX_WAKE.

       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
       FUTEX_WAIT.

       Apelului de sistem futex(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 futex(2) pentru mai multe detalii.  Același lucru este valabil și pentru
       așteptarea asincronă a futex-ului.

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.

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.

       Această  pagină  de  manual  ilustrează  cea  mai frecventă utilizare a primitivelor futex(2); nu este în
       niciun caz singura.

CONSULTAȚI ȘI

       clone(2), futex(2), get_robust_list(2), set_robust_list(2), set_tid_address(2), pthreads(7)

       Fuss, Futexes and Furwocks: Fast Userlevel Locking in Linux  (lucrările  de  la  Ottawa  Linux  Symposium
       2002),  biblioteca  de  exemple futex, futex-*.tar.bz2 https://mirrors.kernel.org/pub/linux/kernel/people
       /rusty/.

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 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.

Pagini de manual de Linux 6.03                  30 octombrie 2022                                       futex(7)