Код Senior GIL, потоки и процессы обновлено
Найти риск взаимной блокировки
Условие
Дан список потоков, для каждого порядок захвата блокировок (поток держит все предыдущие, когда берёт следующую). Есть риск deadlock, если в графе «блокировка A взята раньше B в каком-то потоке» (ребро A -> B) есть цикл. Верните True, если риск есть.
Примеры
has_deadlock_risk([["a", "b"], ["b", "a"]]) // true
has_deadlock_risk([["a", "b"], ["a", "b"]]) // false
has_deadlock_risk([]) // false
Как подойти
Подсказки: 2
- Ребро A -> B для каждой пары «A взята раньше B» в одном потоке.
- Поиск цикла DFS с цветами.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.