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

Приходилось ли работать с deadlock

Да, приходилось. Deadlock (взаимная блокировка) возникает, когда два или более потока/процесса ждут освобождения ресурсов, занятых друг другом, образуя цикл ожидания.

Пример на Python:

python
import threading

lock1 = threading.Lock()
lock2 = threading.Lock()

def thread1():
    with lock1:
        print("Thread1 acquired lock1")
        with lock2:  # Deadlock, если thread2 уже взял lock2
            print("Thread1 acquired lock2")

def thread2():
with lock2:
print("Thread2 acquired lock2")
with lock1: # Deadlock, если thread1 уже взял lock1
print("Thread2 acquired lock1")

t1 = threading.Thread(target=thread1)
t2 = threading.Thread(target=thread2)
t1.start(); t2.start()
t1.join(); t2.join()

text

**Как избежать:**  
1. Упорядочивание блокировок (всегда брать `lock1` перед `lock2`).  
2. Использование `timeout` в `acquire()`.  
3. Применение контекстных менеджеров (`with`).  
4. Использование `RLock` для реентерабельных блокировок.  

Для обнаружения можно использовать инструменты вроде `threading.dump_locks()`.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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