📌 Deadlock
Deadlock — ситуация, при которой два или более потоков или процессов навсегда ждут ресурсов, захваченных друг другом. Ни один из участников не может продолжить выполнение.
🧠 Как работает
Взаимная блокировка возникает, когда одновременно выполняются следующие условия (по Coffman):
- Взаимное исключение — ресурс доступен только одному потоку
 - Удержание и ожидание — поток удерживает один ресурс и ждёт другой
 - Отсутствие принудительного освобождения — ресурсы не изымаются
 - Циклическое ожидание — существует цикл зависимостей между потоками
 
Пример (C-like):
// Thread A
lock(mutex1);
lock(mutex2); // блокируется, если mutex2 занят Thread B
 
// Thread B
lock(mutex2);
lock(mutex1); // блокируется, если mutex1 занят Thread A⚙️ Где возникает
| Область | Примеры | 
|---|---|
| Multithreading | Неправильный порядок захвата Mutex | 
| Database | Взаимные блокировки транзакций | 
| Kernel | Некорректное использование Semaphore/Spinlock | 
| Filesystem | Зависания при монтировании/снятии | 
| Distributed System | Взаимные RPC-зависимости | 
✅ Преимущества (отсутствуют)
Deadlock — ошибка проектирования. Единственный плюс — позволяет обнаружить узкие места в логике параллельности.
❌ Недостатки
- 
Полная остановка исполнения
 - 
Трудность обнаружения и диагностики
 - 
Неочевидные условия в многопоточной среде
 - 
Может проявляться только при определённой нагрузке (heisenbug)
 
🛡 Методы предотвращения/обхода
- 
Избежание: Lock ordering, таймауты, try-lock
 - 
Обнаружение: мониторинг графа зависимостей
 - 
Предотвращение: использование одного глобального Mutex
 - 
Разрешение: принудительное снятие блокировки, перезапуск потока