Встречается на собеседованиях • сегодня
Зачем нужен deadlock
Deadlock (взаимная блокировка) возникает, когда два или более потока бесконечно ожидают освобождения ресурсов, захваченных друг другом. Например, поток A удерживает ресурс X и ждёт Y, а поток B удерживает Y и ждёт X.
Причины:
- Взаимная блокировка ресурсов
- Отсутствие упорядочивания запросов
- Невозможность перехватывать ресурсы
Пример:
python
import threading
lock1 = threading.Lock()
lock2 = threading.Lock()
def thread1():
with lock1:
with lock2:
print("Thread 1")
def thread2():
with lock2:
with lock1:
print("Thread 2")
t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start(); t2.start()
t1.join(); t2.join() # Deadlock!Как избежать:
- Использовать таймауты (
lock.acquire(timeout=5)) - Упорядочивать блокировки (всегда брать
lock1передlock2) - Применять контекстные менеджеры (
with) - Использовать
threading.RLockдля рекурсивных блокировок

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы