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

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

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