Wat is Spinlock?
Lock waarbij wordt gewacht door in een lus de lockvariabele te blijven controleren tot de lock vrij is. Snel als de wachttijd kort is, maar de CPU blijft ook tijdens het wachten in gebruik.
Japanse benaming: スピンロック
“Spinlock” komt voor in 4 oefenvragen uit 1 onderwerpen, bijv. Multicore en synchronisatie.
Vakgebied: Multicore en synchronisatie
Waar spinlocks passen en waar ze falen
Spinlocks komen veel voor in kernels van besturingssystemen, voor korte kritieke secties op multiprocessors en voor data die wordt gedeeld met interrupthandlers, die niet mogen slapen. Code die een spinlock vasthoudt mag niet slapen, en kernels schakelen tijdens het vasthouden meestal preemption uit, en waar nodig interrupts, zodat een interrupthandler op dezelfde core niet eeuwig blijft spinnen op een lock die zijn eigen core vasthoudt. Op een systeem met één core is een spinlock op gebruikersniveau extra verspillend: de houder kan niet draaien om de lock vrij te geven terwijl de wachtende thread spint, dus die verbruikt zijn hele tijdsslot.
Veelgestelde vragen
Wat is het verschil tussen een spinlock en een mutex?
Een spinlock wacht door in een lus de lockvariabele te controleren en houdt de CPU bezig, wat alleen efficiënt is bij heel korte wachttijden. Een mutex laat de wachtende thread slapen en andere threads draaien, wat beter past bij langere wachttijden maar de kosten van slapen, wekken en contextswitches toevoegt.
Wanneer gebruik je een spinlock?
Gebruik er een als de kritieke sectie heel kort is en threads op verschillende cores draaien, of in kernelcontexten zoals interrupthandlers die niet mogen slapen. Vermijd hem als de lock lang kan worden vastgehouden of op systemen met één core.
Wat is test-and-test-and-set?
Het is een spinlocktechniek waarbij wachtende threads de lock herhaaldelijk met gewone loads uit hun eigen cache lezen en de atomaire test-and-set pas proberen als de lock vrij lijkt. Dat voorkomt voortdurende invalidaties van de cacheline en vermindert het coherentieverkeer sterk.