Livelock: в чем, пример, разница с Deadlock

Что такое Лайвлок?

A динамический тупик Это ситуация, когда запрос на монопольную блокировку неоднократно отклоняется, поскольку множество перекрывающихся общих блокировок продолжают мешать друг другу. Процессы продолжают менять свой статус, что еще больше мешает им выполнить задачу. Это еще больше мешает им выполнить задачу.

Примеры Livelock

Пример 1:

Самый простой пример Лайвлока — два человека, которые встречаются лицом к лицу в коридоре, и оба отходят в сторону, чтобы пропустить другого. В конечном итоге они перемещаются из стороны в сторону, не добиваясь никакого прогресса, поскольку в каждый момент времени они движутся одинаково. Здесь они никогда не пересекаются друг с другом.

Пример 2:

Примеры Livelock

На изображении выше вы можете видеть, что каждому из двух данных процессов требуется два ресурса, и они используют примитивный опрос входа в реестр, чтобы попытаться получить необходимые им блокировки. Если попытка не удалась, метод снова сработает.

  1. Процесс A удерживает ресурс Y
  2. Процесс B содержит ресурс X
  3. Процессу A требуется ресурс X
  4. Процесс B требует ресурса Y

Предположим, что сначала запускается процесс A и получает ресурс данных X, а затем запускается процесс B и получает ресурс Y, независимо от того, какой процесс запускается первым, ни один из них не продвигается дальше.

Однако ни один из двух процессов не блокируется. Они неоднократно используют ресурсы ЦП без какого-либо прогресса, но также останавливают любой блок обработки.

Таким образом, данная ситуация не является ситуацией тупик потому что нет ни одного заблокированного процесса, но мы сталкиваемся с ситуацией, эквивалентной взаимоблокировке, то есть LIVELOCK.

Что приводит к Livelock?

Живая блокировка возникает, когда общее количество разрешенных процессов в конкретной системе должно определяться общим количеством записей в таблице процессов. Поэтому слоты таблицы процессов следует называть конечными ресурсами.

Что такое тупик?

Взаимная блокировка — это ситуация, которая возникает в ОС, когда какой-либо процесс переходит в состояние ожидания, поскольку другой ожидающий процесс удерживает требуемый ресурс. Взаимная блокировка — это распространенная проблема в многопроцессорной обработке, когда несколько процессов используют определенный тип взаимоисключающего ресурса, известного как программная блокировка или программное обеспечение.

Пример тупика

  • Реальным примером может служить движение транспорта только в одном направлении.
  • Здесь мост считается ресурсом.
  • Таким образом, когда происходит тупик, его можно легко решить, если одна машина даст задний ход (вытеснение ресурсов и откат).
  • В случае возникновения тупиковой ситуации может потребоваться резервное копирование нескольких автомобилей.
  • Так что голодание возможно.
Пример тупика
Пример тупика

Что такое голодание?

«Голод» — это ситуация, когда все процессы с низким приоритетом блокируются, а процессы с высоким приоритетом продолжаются. В любой системе запросы к ресурсам с высоким/низким приоритетом продолжают происходить динамически. Таким образом, требуется определенная политика, чтобы решить, кто и когда получит поддержку.

При использовании некоторых алгоритмов некоторые процессы могут не получить желаемого обслуживания, даже если они не зашли в тупик. Недостаточность возникает, когда некоторые потоки делают общие ресурсы недоступными в течение длительного периода времени.

Пример голодания

Например, объект предлагает синхронизированный метод, возврат которого может занять много времени. Если один поток часто использует этот метод, другие потоки, которым также требуется частый синхронизированный доступ к тому же объекту, часто будут блокироваться.

Разница между тупиком, голоданием и Livelock

  • Взаимная блокировка — это ситуация, которая возникает в ОС, когда какой-либо процесс переходит в состояние ожидания, поскольку требуемый ресурс удерживается другим ожидающим процессом.
  • С другой стороны, активная блокировка почти похожа на тупиковую, за исключением того, что состояния процессов, участвующих в динамической блокировке, постоянно меняются друг на друга, ни один из них не прогрессирует.
  • Итак, Livelock — это уникальный случай нехватки ресурсов.

Резюме

  • Определение: Livelock — это ситуация, когда запрос на эксклюзивную блокировку неоднократно отклоняется, поскольку множество перекрывающихся общих блокировок продолжают мешать друг другу.
  • Livelock возникает, когда общее количество разрешенных процессов в конкретной системе должно определяться общим количеством записей в таблице процессов.
  • Взаимная блокировка — это ситуация, которая возникает в ОС, когда какой-либо процесс переходит в состояние ожидания, поскольку другой ожидающий процесс удерживает требуемый ресурс.
  • Реальным примером может служить движение транспорта только в одном направлении.
  • Примером Лайвлока могут быть два человека, которые встречаются лицом к лицу в коридоре, и оба отходят в сторону, чтобы пропустить другого.
  • «Голод» — это ситуация, когда все процессы с низким приоритетом блокируются, а процессы с высоким приоритетом продолжаются.