Spinlock

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í 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í

Související články

Pahýl
Pahýl
Tento článek je příliš stručný nebo postrádá důležité informace.
Pomozte Wikipedii tím, že jej vhodně rozšíříte. Nevkládejte však bez oprávnění cizí texty.