Junior — Middle
Czym jest zakleszczenie zasobów i w jakich sytuacjach występuje w systemach?
sobes.tech AI
Odpowiedź od AI
Deadlock (zakleszczenie) to sytuacja w systemach wielozadaniowych, gdy dwa lub więcej procesów (lub wątków) na zawsze blokuje się nawzajem, oczekując na zwolnienie zasobów zajętych przez siebie.
Występuje, gdy jednocześnie spełnione są wszystkie cztery warunki:
- Wzajemne wykluczenie — zasób może być zajęty tylko przez jeden proces.
- Utrzymanie i oczekiwanie — proces utrzymuje jeden zasób i oczekuje na inny.
- Niemożność wymuszonego zwolnienia — zasób nie może być odebrany procesowi, dopóki ten go nie zwolni dobrowolnie.
- Cykl oczekiwania — istnieje cykl procesów, z których każdy oczekuje na zasób zajęty przez kolejny w cyklu.
Przykład: proces A zajął zasób 1 i oczekuje na zasób 2, a proces B zajął zasób 2 i oczekuje na zasób 1 — oboje są na zawsze zablokowani.
W iOS i innych systemach deadlocki często występują z powodu niewłaściwego użycia synchronizacji, np. przy przechwytywaniu wielu blokad w różnej kolejności.
Aby zapobiec deadlockom, stosuje się:
- uporządkowanie przechwytywania zasobów;
- limity czasowe oczekiwania;
- unikanie utrzymywania zasobów podczas oczekiwania na inne;
- korzystanie ze specjalistycznych mechanizmów synchronizacji.