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

Как решить проблему кольцевой блокировки

Кольцевая блокировка (deadlock) возникает, когда несколько потоков/процессов блокируют друг друга, ожидая освобождения ресурсов. Основные способы решения:

  1. Упорядочивание блокировок - всегда захватывать мьютексы в одинаковом порядке:
python
lock1 = threading.Lock()
lock2 = threading.Lock()

def thread1():
with lock1, lock2: # Всегда сначала lock1, потом lock2
pass

text

2. **Таймауты** - использовать `acquire(timeout)` вместо бесконечного ожидания:
```python
if lock1.acquire(timeout=1):
    try:
        if lock2.acquire(timeout=1):
            # Работа с ресурсами
            lock2.release()
    finally:
        lock1.release()
  1. Разрушение - принудительно освобождать ресурсы, если deadlock обнаружен.

  2. Избегание - алгоритмы вроде Banker's Algorithm для предсказания deadlock.

  3. Использование RLock - рекурсивные блокировки в одном потоке.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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