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

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads