Взаємне блокування (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) — вбивство процесів.