Spinlock
From Wikipedia, the free encyclopedia
Remove ads
Spinlock je v operačních systémech druh zámku, na nějž je třeba aktivně čekat – čekající proces tedy při čekání na spinlock spotřebovává systémové prostředky.
Spinlocky se zpravidla používají pouze v operačním systému, aplikacím jsou poskytována složitější synchronizační primitiva, které čekající aplikace uspí a zařadí do fronty, takže v době, kdy jsou zablokovány, může běžet něco jiného. Na druhou stranu, tyto složitější struktury vyžadují ochranu svých dat proti vícenásobnému přístupu, a k tomu lze použít právě jednodušší a rychlejší spinlocky.
Příklad implementace spinlocku v assembleru architektury x86:
zacatek:
mov eax, 1 ; přesuneme jedničku do registru
xchg eax, [ $zamek ] ; jednou instrukcí [[atomicita|atomicky]] prohodíme obsah registru
; s proměnnou držící zámek. nyní je v proměnné určitě jednička
test eax, eax ; pokud je v registru nula, zámek byl před prohozením
; odemčený, tudíž jsme jej získali a můžeme pokračovat
jnz zacatek ; … jinak to zkusíme znovu od začátku
; ( kritická sekce )
mov eax, 0 ; konec, vrátíme do proměnné nulu a tím zámek odemkneme
xchg eax, [ $zamek ] ; na toto by měla fungovat i prostá instrukce mov,
; ale na některých procesorech se pokazí
Remove ads
Související články
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads