Futex ( în engleză futex , prescurtare de la engleză fast userspace mutex ) este o primitivă de sincronizare ușoară de nivel scăzut [1] , pe baza căreia sunt implementate alte primitive și mecanisme, cum ar fi mutexuri , semafore și variabile de condiție [2] . De asemenea, futexe-urile pot participa la organizarea unor mecanisme de sincronizare mai complexe, cum ar fi bariere și blocări de citire-scriere , permițându-vă să activați simultan un grup de sarcini. A fost introdus inițial în versiunile timpurii ale nucleului Linux 2.5 [1] . Mai târziu, o primitivă aproape identică a fost implementată în nucleuFerestre [3] .
A apărut pentru prima dată în versiunea 2.5.7 a nucleului Linux, stabilizarea semantică s-a încheiat în versiunea 2.5.40 .
Dezvoltat de Hubertus Franke (la Centrul de Cercetare Thomas Watson al IBM ), Matthew Kirkwood și Rusty Russell de la Centrul de tehnologie IBM Linux și dezvoltatorul Red Hat Ingo Molnar.
Un futex este un număr întreg aliniat în memoria partajată (pentru procesoare multiple) în spațiul utilizatorului și o coadă de așteptare în spațiul kernel [4] . Pentru a organiza un futex, este necesară cel puțin o pagină de memorie , mapată la spațiul de adrese al fiecăruia dintre procesele care participă la futex. Apelurile de sistem sunt destinate numai bibliotecilor de streaming din spațiul utilizatorului și numai sub formă de instrucțiuni în limbaj de asamblare [5] .
Un număr întreg partajat poate fi incrementat sau decrementat cu o instrucțiune de asamblare una într -o singură. Procesele legate de acest futex așteaptă ca această valoare să devină pozitivă. Toate operațiunile cu futexe sunt aproape complet efectuate în spațiul utilizatorului (în absența concurenței [6] ), funcțiile nucleului corespunzătoare sunt utilizate doar într-un set limitat de cazuri controversate. Acest lucru face posibilă creșterea eficienței utilizării primitivelor de sincronizare , deoarece majoritatea operațiunilor nu folosesc arbitrajul și, prin urmare, evită utilizarea apelurilor de sistem relativ costisitoare ( apeluri de sistem în engleză ).
Obiectele CRITICAL_SECTION din API-ul Win32 sunt optimizate în mod similar , ca și FAST_MUTEX în kernelul Windows [7] .