Futex ( engelsk futex , forkortelse for engelsk fast userspace mutex ) er en letvægts-synkroniseringsprimitiv på lavt niveau [1] , på grundlag af hvilken andre primitiver og mekanismer implementeres, såsom mutexes , semaforer og betingelsesvariable [2] . Futexes kan også deltage i organiseringen af mere komplekse synkroniseringsmekanismer, såsom barrierer og læse-skrive-låse , hvilket giver dig mulighed for samtidigt at vække en gruppe opgaver. Det blev oprindeligt introduceret i tidlige versioner af Linux 2.5 kernen [1] . Senere blev en næsten identisk primitiv implementeret i kernenWindows [3] .
Dukkede først op i Linux-kerneversion 2.5.7, semantisk stabilisering sluttede i version 2.5.40 .
Udviklet af Hubertus Franke (ved IBM 's Thomas Watson Research Center), Matthew Kirkwood og Rusty Russell ved IBM Linux Technology Center og Red Hat - udvikler Ingo Molnar.
En futex er et justeret heltal i delt hukommelse (for flere processorer) i brugerrummet og en ventekø i kernerummet [4] . For at organisere en futex kræves der mindst én hukommelsesside , kortlagt til adresserummet for hver af de processer, der deltager i futex'en. Systemkald er kun beregnet til streamingbiblioteker i brugerrummet og kun i form af assembly-sprog-instruktioner [5] .
Et delt heltal kan øges eller dekrementeres med én i én assembler - instruktion. Processer knyttet til denne futex venter på, at denne værdi bliver positiv. Alle operationer med futexes udføres næsten fuldstændigt i brugerrummet (i mangel af konkurrence [6] ), de tilsvarende kernefunktioner bruges kun i et begrænset sæt af kontroversielle tilfælde. Dette gør det muligt at øge effektiviteten af at bruge synkroniseringsprimitiver , da de fleste operationer ikke bruger voldgift, og derfor undgår brugen af relativt dyre systemkald ( engelske system calls ).
CRITICAL_SECTION-objekter i Win32 API'et er tilsvarende optimeret , ligesom FAST_MUTEX i Windows -kernen [7] .