Взаимная блокировка (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 — похожая ситуация, где процессы не заблокированы, а постоянно меняют состояние, реагируя друг на друга, но не продвигаясь вперед (как два человека, пытающиеся разойтись в коридоре и шагающие в одну сторону).

🔗 Связанные термины

Предварительные знания:

📚 Источники