Livelock: в чем, пример, разница с Deadlock
⚡ Умное резюме
«Лайблокировка» — это ситуация параллельного выполнения, когда процессы постоянно меняют свое состояние в ответ на действия друг друга, но при этом не достигают реального прогресса, оставаясь активными и потребляя ресурсы ЦП, так и не завершая свои задачи и не блокируясь.

Что такое Лайвлок?
A динамический тупик Это ситуация, когда запрос на эксклюзивную блокировку неоднократно отклоняется, поскольку многие запросы перекрываются.ping Разделяемые блокировки постоянно мешают друг другу. Процессы постоянно меняют свой статус, что препятствует выполнению ими задачи.
Примеры Livelock
Пример 1:
Простейший пример Livelock — это два человека, которые встречаются лицом к лицу в коридоре, и оба отходят в сторону, чтобы пропустить другого. Они продолжают двигаться из стороны в сторону, не продвигаясь вперед, потому что движутся в одном направлении одновременно. В данном случае они никогда не пересекаются.
Пример 2:
На изображении выше каждому из двух процессов требуется два ресурса, и они используют примитивный метод опроса для попытки получения необходимых блокировок. Если попытка не удается, метод повторяет попытку.
- Процесс А содержит ресурс Y.
- Процесс B содержит ресурс X
- Для процесса А требуется ресурс X.
- Для процесса B требуется ресурс Y.
Предположим, что сначала запускается процесс А, который получает ресурс X, а затем запускается процесс В, который получает ресурс Y. Независимо от того, какой процесс запустится первым, ни один из них не продвинется дальше.
Однако ни один из этих двух процессов не блокируется. Они многократно расходуют ресурсы ЦП, не продвигаясь вперед, но при этом никогда не останавливаются из-за блокировки обработки.
Следовательно, данная ситуация не является тупикПоскольку ни один процесс не блокируется, мы сталкиваемся с ситуацией, эквивалентной тупику, которая называется LIVELOCK.
Что приводит к Livelock?
Зависание системы от количества процессов, разрешенных системой, определяется общим числом записей в таблице процессов. Таким образом, эти слоты в таблице процессов рассматриваются как ограниченные ресурсы. Когда процессы многократно пытаются получить доступ к этим ограниченным ресурсам, постоянно уступая место друг другу, ни один из них не продвигается вперед, и система переходит в состояние зависания.
Что такое тупик?
A тупик Взаимная блокировка (deadlock) — это ситуация, возникающая в операционной системе, когда процесс переходит в состояние ожидания, поскольку другой ожидающий процесс удерживает запрошенный ресурс. Взаимная блокировка — распространенная проблема в многопроцессорных системах, где несколько процессов совместно используют определенный тип взаимоисключающего ресурса, известного как программная блокировка.
Пример тупика
- В качестве примера из реальной жизни можно привести движение транспорта только в одном направлении.
- Здесь мост считается ресурсом.
- В случае возникновения тупиковой ситуации ее можно легко разрешить, если одна машина отъедет назад (освободит ресурсы и откатится назад).
- В случае возникновения тупиковой ситуации может потребоваться резервное копирование нескольких автомобилей.
- Следовательно, голодание возможно.
Пример тупика
Что такое голодание?
«Голодание» — это ситуация, когда процессы с низким приоритетом блокируются, в то время как процессы с высоким приоритетом продолжают работу. В любой системе запросы на ресурсы с высоким и низким приоритетом постоянно поступают динамически. Поэтому необходима определенная политика, определяющая, кто и когда получит доступ к ресурсам.
При использовании некоторых алгоритмов определенные процессы могут не получать желаемого обслуживания, даже если они не находятся в состоянии взаимоблокировки. Голодание возникает, когда некоторые потоки делают совместно используемые ресурсы недоступными в течение длительного периода времени.
Пример голодания
Например, объект предоставляет синхронизированный метод, выполнение которого, вероятно, займет много времени. Если один поток часто использует этот метод, другие потоки, которым также необходим частый синхронизированный доступ к тому же объекту, часто блокируются.
Разница между тупиком, голоданием и Livelock
- Взаимная блокировка — это ситуация, возникающая в операционной системе, когда процесс переходит в состояние ожидания, поскольку запрашиваемый ресурс занят другим ожидающим процессом.
- С другой стороны, тупиковая ситуация почти идентична безвыходной, за исключением того, что состояния процессов, участвующих в тупиковой ситуации, постоянно меняются в ответ друг на друга, и ни один из них не продвигается вперед.
- Таким образом, эффект «живой блокировки» — это уникальный случай нехватки ресурсов.


