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

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

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

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

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