Spinlock

Spinlock to rodzaj mechanizmu synchronizacji dostępu do zasobu w systemach wielowątkowych, który polega na wielokrotnym sprawdzaniu stanu zasobu (np. zmiennej) i blokowaniu dostępu do niego przez inne wątki, aż do momentu, gdy stan zasobu ulegnie zmianie. W przypadku spinlocku, wątek, który nie może uzyskać dostępu do zasobu, nie jest blokowany, lecz nadal wykonuje pętle sprawdzające stan zasobu. Takie podejście może być efektywne, gdy okres blokowania jest krótki, ale może prowadzić do wysokiego obciążenia procesora i zużycia zasobów, jeśli okres blokowania jest długi.

Zasadę działania Spinlock dobrze obrazuje następujący diagram:

Opis

Zaczynamy od sytuacji gdy pierwszy wątek już wcześniej zajął zasób. Drugi wątek odpytuje się pierwszy raz o zasób i otrzymuje negatywną odpowiedź. Za chwilę próbuje znowu (w pętli) i znowu otrzymuje negatywną odpowiedź. W tym momencie następuje zwolnienie zasobu przez wątek pierwszy. Wątek drugi kontynuuje odpytywanie o zasób i tym razem dostaje odpowiedź pozytywną – może zająć zasób.