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