Взаємне блокування (Deadlock)

Ситуація, коли процеси заблоковані назавжди, очікуючи один одного.

Deadlock (тупик, клінч) — це стан у багатозадачній системі, коли кожен процес із набору очікує подію, яку може ініціювати лише інший процес із того ж набору. Оскільки всі вони чекають, жоден не може продовжити виконання.

Для виникнення дедлоку необхідні 4 умови Коффмана: 1) Взаємне виключення, 2) Утримання та очікування, 3) Відсутність примусового вилучення (no preemption), 4) Циклічне очікування.

        graph LR
  Center["Взаємне блокування (Deadlock)"]:::main
  Pre_process["process"]:::pre --> Center
  click Pre_process "/terms/process"
  Pre_mutex["mutex"]:::pre --> Center
  click Pre_mutex "/terms/mutex"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простими словами

Уявіть перехрестя, де з чотирьох сторін під'їхали машини. Кожна заблокувала проїзд іншій. Жодна не може рушити вперед, доки не поїде інша, і ніхто не може здати назад. Вони стоять вічно.

🤓 Expert Deep Dive

Стратегії боротьби з дедлоками: 1) Ігнорування (Ostrich algorithm) — припускаємо, що це трапляється рідко (підхід Windows/Linux); 2) Запобігання (Deadlock Prevention) — порушення однієї з 4 умов Коффмана; 3) Уникнення (Deadlock Avoidance) — алгоритм банкіра (Banker's Algorithm), що перевіряє безпечність стану перед виділенням ресурсу; 4) Виявлення та відновлення (Detection & Recovery) — вбивство процесів.

🔗 Пов'язані терміни

Попередні знання:

📚 Джерела