Назад к вопросам
Контур
Junior — Middle
59
Когда вы сталкивались с ситуациями взаимной блокировки процессов, и как вы её решали?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Взаимная блокировка (deadlock) в Python может возникать при работе с потоками или процессами, когда два или более процесса ждут освобождения ресурсов друг другом.
Например, два потока могут пытаться захватить два блокировочных объекта (Lock) в разном порядке, что приводит к взаимной блокировке.
Для решения таких ситуаций применяют:
- Избегание вложенных блокировок или всегда захватывать блокировки в одном и том же порядке.
- Использование таймаутов при захвате блокировок, чтобы избежать бесконечного ожидания.
- Применение более высокоуровневых синхронизирующих примитивов, например,
RLockилиSemaphore.
Пример:
import threading
lock1 = threading.Lock()
lock2 = threading.Lock()
def thread1():
with lock1:
print("Thread 1 acquired lock1")
with lock2:
print("Thread 1 acquired lock2")
def thread2():
with lock2:
print("Thread 2 acquired lock2")
with lock1:
print("Thread 2 acquired lock1")
# Такой код может привести к deadlock, если оба потока запустятся одновременно.
Чтобы избежать deadlock, нужно гарантировать последовательность захвата блокировок одинаковую для всех потоков.