Как избежать deadlock/livelock при работе с блокировками?
Чем Deadlock отличается от Livelock?
Чем livelock отличается от deadlock?
Специализация
Python Backend Developer
Java Backend Developer
Node.js Backend Developer
Golang Backend Developer
React Frontend Developer
Выберите навыки
React
JavaScript
Git
Redux
Webpack
Сложность
1-3
4-6
7-8
9-10
Рейтинг вопросов
1
2
3
4
5
Подпишись на React Developer в телеграм
Рейтинг:
2
Сложность:
5
Избегайте вложенных блокировок.
Используйте таймауты (например, tryLock(timeout)).
Упорядочивайте блокировки (всегда получайте lockA перед lockB).
Рейтинг:
1
Сложность:
6
Deadlock: Потоки блокируют друг друга навсегда (ожидают ресурсы по кругу).
Livelock: Потоки активно работают, но не прогрессируют (например, из-за "вежливой" логики).
Рейтинг:
4
Сложность:
7
При deadlock потоки полностью остановлены и ничего не делают. При livelock потоки продолжают работать, но не продвигаются к результату. Они постоянно реагируют друг на друга. CPU при этом может активно использоваться. С точки зрения результата система так же бесполезна.