oracular (7) futex.7.gz

Provided by: manpages-ro_4.23.1-1_all bug

NUME

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

SINOPSIS

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