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

Зачем нужен 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 для рекурсивных блокировок
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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