Sobes.tech
Back to questions
Junior — Middle
58

Когда вы сталкивались с ситуациями взаимной блокировки процессов, и как вы её решали?

Companies where asked
КонтурКонтур

Answer from AI

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, нужно гарантировать последовательность захвата блокировок одинаковую для всех потоков.