Встречается на собеседованиях • сегодня

Как исправить DeadLock

Deadlock возникает, когда два или более потока блокируют друг друга, ожидая освобождения ресурсов. Вот основные способы исправить deadlock:

  1. Упорядочивание блокировок - всегда захватывать блокировки в одинаковом порядке:
python
lock1 = threading.Lock()
lock2 = threading.Lock()

# Правильно:
with lock1:
    with lock2:
        # код
  1. Использование таймаутов - acquire(timeout) вместо бесконечного ожидания:
python
if lock1.acquire(timeout=1):
    try:
        if lock2.acquire(timeout=1):
            try:
                # код
            finally:
                lock2.release()
    finally:
        lock1.release()
  1. Избегание вложенных блокировок - рефакторинг кода для минимизации областей с блокировками.

  2. Использование RLock - реентерабельные блокировки для повторного входа в тот же поток.

  3. Проектирование без блокировок - использование thread-safe структур данных или асинхронных подходов.

Лучшая практика - всегда освобождать блокировки в finally-блоке и минимизировать время удержания блокировки.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы