Sobes.tech
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:

  1. Wzajemne wykluczenie — zasób może być zajęty tylko przez jeden proces.
  2. Utrzymanie i oczekiwanie — proces utrzymuje jeden zasób i oczekuje na inny.
  3. Niemożność wymuszonego zwolnienia — zasób nie może być odebrany procesowi, dopóki ten go nie zwolni dobrowolnie.
  4. 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.