Что такое состояние взаимоблокировки
Python
Senior
Без компании
Что такое состояние взаимоблокировки
Ответы
Взаимоблокировка (deadlock) — ситуация, когда два или более потока/процесса бесконечно ожидают освобождения ресурсов, заблокированных друг другом.
**Условия для deadlock:**
- Взаимное исключение (ресурс занят одним потоком).
- Удержание и ожидание (поток держит ресурс и ждёт другой).
- Отсутствие вытеснения (ресурс нельзя отнять).
- Циклическое ожидание (замкнутый круг зависимостей).
**Пример на Python:**
```
import threading
lock1 = threading.Lock()
lock2 = threading.Lock()
def thread1():
with lock1:
with lock2:
print("Thread1")
def thread2():
with lock2:
with lock1:
print("Thread2")
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start(); t2.start()
```
**Решение:**
- Упорядочивание блокировок (одинаковый порядок захвата).
- Таймауты на `acquire()`.
- Использование `RLock` или менеджеров контекста.