Состояние, когда несколько процессов постоянно меняют свое состояние в ответ друг на друга, выполняя действия, но не достигая прогресса. Они не заблокированы, но и не могут завершить свою работу.
Пример: два человека пытаются разойтись в узком коридоре, постоянно наступая друг другу навстречу вместо того, чтобы уступить.
В многопоточных приложениях Livelock может произойти, например, когда потоки пытаются захватить ресурсы в определенном порядке, но каждый раз "уступают" другому потоку, не позволяя ни одному из них завершить операцию.
Сравнение с Deadlock:
| Характеристика | Livelock | Deadlock |
|---|---|---|
| Состояние | Процессы активны, тратят ЦПУ | Процессы заблокированы |
| Прогресс | Отсутствует | Отсутствует |
| Причина | Постоянное изменение состояния | Взаимная блокировка ресурсов |
Предотвращение: тщательное проектирование логики взаимодействия потоков, использование тайм-аутов или детерминированного порядка захвата ресурсов.