POSIX Threads/Synchronizacja między wątkami/Wirujące blokady
Wstęp
edytujWirująca blokada (spinlock) jest rodzajem blokady, w której aktywnie oczekuje się na jej zwolnienie w przypadku, gdy nie może zostać pozyskana. Pod względem semantyki nie różnią się od mutexów, jednak zasadniczo różnią w implementacji i zakresie zastosowania.
Przede wszystkim spinlock zużywa czas procesora, więc jego stosowanie ma sens, gdy współdzielone zasoby nie są zbyt długo blokowane przez inne wątki. Ponadto na systemach wieloprocesorowych unika się kosztownego przełączania kontekstu.
Inicjalizacja i zwalnianie
edytujTypy
edytuj- pthread_spinlock_t
Funkcje
edytuj- int pthread_spin_init(pthread_spinlock_t *lock, int pshared) (doc)
- inicjalizacja wirującej blokady; argument pshared przymuje wartości PTHREAD_PROCESS_PRIVATE lub PTHREAD_PROCESS_SHARED, jeśli dostępna jest opcja THS - patrz synchronizacja między wątkami różnych procesów
- int pthread_spin_destroy(pthread_spinlock_t *lock) (doc)
- zniszczenie wirującej blokady
Pozyskiwanie blokady
edytujFunkcje
edytuj- int pthread_spin_lock(pthread_spinlock_t *lock) (doc)
- założenie blokady, jeśli nie jest to możliwe - oczekiwanie
- int pthread_spin_trylock(pthread_spinlock_t *lock) (doc)
- założenie blokady, jeśli nie jest to możliwe - zwrócenie kodu błędu EBUSY
Zwalnianie blokady
edytujFunkcje
edytuj- int pthread_spin_unlock(pthread_spinlock_t *lock) (doc)
- zwolnienie blokady