Встречается на 2% собеседований по Python
Что такое DeadLock
DeadLock (взаимная блокировка) — ситуация, когда два или более потока/процесса бесконечно ожидают ресурсы, захваченные друг другом, и не могут продолжить выполнение.
Пример на Python с использованием threading:
python
import threading
lock1 = threading.Lock()
lock2 = threading.Lock()
def thread1():
with lock1:
print("Thread 1 acquired lock1")
with lock2: # Блокируется, если lock2 уже захвачен
print("Thread 1 acquired lock2")
def thread2():
with lock2:
print("Thread 2 acquired lock2")
with lock1: # Блокируется, если lock1 уже захвачен
print("Thread 2 acquired lock1")
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start()
t2.start()
t1.join()
t2.join()
text
**Причины DeadLock:**
1. Условие взаимного исключения (ресурсы не могут быть разделены).
2. Удержание и ожидание (поток держит один ресурс и ждет другой).
3. Отсутствие вытеснения (ресурсы нельзя отобрать у потока).
4. Круговая зависимость (потоки блокируют друг друга по цепочке).
**Решение:**
- Упорядочивание блокировок (всегда захватывать `lock1` перед `lock2`).
- Использование таймаутов (`lock.acquire(timeout=5)`).
- Применение контекстных менеджеров (`with`).
- Алгоритмы предотвращения (например, Banker’s algorithm).
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
Похожие вопросы
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы