Встречается на собеседованиях • сегодня
Приходилось ли работать с 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()`.
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы