Взаимная блокировка (Deadlock)
Ситуация вечного ожидания, когда процессы блокируют друг друга.
Дедлок — это ситуация, при которой несколько потоков не могут продолжить выполнение, так как каждый из них удерживает ресурс, необходимый другому. Это приводит к зависанию части или всей системы.
Классический пример: Поток А имеет ресурс 1 и ждет ресурс 2. Поток Б имеет ресурс 2 и ждет ресурс 1.
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
Wait-for graph — граф ожидания, где циклы указывают на наличие дедлока. Livelock — похожая ситуация, где процессы не заблокированы, а постоянно меняют состояние, реагируя друг на друга, но не продвигаясь вперед (как два человека, пытающиеся разойтись в коридоре и шагающие в одну сторону).