Junior — Middle
Czy możesz wyjaśnić, jakie rodzaje blokad istnieją i jak działają w programowaniu wielowątkowym?
sobes.tech AI
Odpowiedź od AI
W programowaniu wielowątkowym istnieją różne typy blokad, które pomagają synchronizować dostęp do zasobów współdzielonych:
- Mutex (Mutual Exclusion) — zapewnia wyłączny dostęp do zasobu. Tylko jeden wątek może go zdobyć w danym momencie.
- Rekursywny mutex — pozwala temu samemu wątkowi na wielokrotne zdobycie blokady bez wzajemnego blokowania się.
- Blokada odczytu-zapisu (Read-Write Lock) — pozwala wielu wątkom na jednoczesne czytanie zasobu, ale zapis jest możliwy tylko wyłącznie.
- Semafor — ogranicza liczbę wątków, które mogą jednocześnie uzyskać dostęp do zasobu.
- Spinlock (aktywny oczekiwacz) — wątek w pętli sprawdza dostępność blokady, nie przechodząc w stan oczekiwania.
Przykład użycia mutexa w Swift:
let lock = NSLock()
func criticalSection() {
lock.lock()
// Sekcja krytyczna
lock.unlock()
}
Wybór typu blokady zależy od zadania oraz wymagań dotyczących wydajności i bezpieczeństwa.