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

Что такое состояние взаимоблокировки

Взаимоблокировка (deadlock) — ситуация, когда два или более потока/процесса бесконечно ожидают освобождения ресурсов, заблокированных друг другом.

Условия для deadlock:

  1. Взаимное исключение (ресурс занят одним потоком).
  2. Удержание и ожидание (поток держит ресурс и ждёт другой).
  3. Отсутствие вытеснения (ресурс нельзя отнять).
  4. Циклическое ожидание (замкнутый круг зависимостей).

Пример на Python:

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

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

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

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