POSIX Threads/Synchronizacja między wątkami/Wirujące blokady

Wstęp edytuj

Wirują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 edytuj

Typy 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 edytuj

Funkcje 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 edytuj

Funkcje edytuj

  • int pthread_spin_unlock(pthread_spinlock_t *lock)  (doc)
zwolnienie blokady