Livelock: що таке, наприклад, різниця з Deadlock
⚡ Розумний підсумок
Livelock — це ситуація паралельного виконання, коли процеси постійно змінюють свої стани у відповідь один на одного, але не досягають реального прогресу, залишаючись активними та споживаючи цикли процесора, так і не виконавши своїх завдань і не заблокувавшись.

Що таке Livelock?
A динамічний тупик це ситуація, коли запит на ексклюзивне блокування неодноразово відхиляється, оскільки багато перекриваютьсяping Спільні блокування постійно заважають одне одному. Процеси постійно змінюють свій статус, що заважає їм виконати завдання.
Приклади Livelock
Приклад 1:
Найпростіший приклад Лайвлока – це двоє людей, які зустрічаються віч-на-віч у коридорі, і обидва розступаються, щоб пропустити іншого. Вони продовжують рухатися з боку в бік, не роблячи жодного прогресу, оскільки рухаються в одному напрямку одночасно. Тут вони ніколи не перетинаються.
Приклад 2:
На зображенні вище кожному з двох процесів потрібні два ресурси, і вони використовують примітивне опитування, щоб спробувати отримати необхідні блокування. Якщо спроба не вдається, метод повторює спробу.
- Процес A зберігає ресурс Y
- Процес B містить ресурс X
- Процес A потребує ресурсу X
- Процес B потребує ресурсу Y
Припустимо, що першим запускається процес A та отримує ресурс X, а потім запускається процес B та отримує ресурс Y. Незалежно від того, який процес запускається першим, жоден з них не виконує подальших дій.
Однак жоден із двох процесів не блокується. Вони постійно використовують ресурси процесора, не роблячи жодного прогресу, проте ніколи не зупиняються на етапі обробки.
Отже, ця ситуація не є тупик, оскільки жоден процес не блокується; натомість ми стикаємося з ситуацією, еквівалентною глухому блокуванню, яка називається LIVELOCK.
Що призводить до Livelock?
Блокування часу пов'язане з кількістю процесів, дозволених системою, яка визначається загальною кількістю записів у таблиці процесів. Тому ці слоти таблиці процесів розглядаються як обмежені ресурси. Коли процеси неодноразово намагаються отримати ці обмежені ресурси, постійно поступаючись один одному, жоден з них не досягає прогресу, і система вступає в блокування часу.
Що таке Deadlock?
A тупик — це ситуація, яка виникає в ОС, коли процес переходить у стан очікування, оскільки інший процес очікування утримує запитуваний ресурс. Взаємоблокування — поширена проблема в багатопроцесорній обробці, де кілька процесів спільно використовують певний тип взаємовиключного ресурсу, відомий як м’яке блокування або програмне забезпечення.
Приклад тупика
- Реальним прикладом може бути рух транспорту, який рухається лише в одному напрямку.
- Тут міст вважається ресурсом.
- Коли виникає глухий кут, його можна легко вирішити, якщо один автомобіль дасть задній ход (використати ресурси та відкотитися).
- У разі виникнення тупикової ситуації може знадобитися резервне копіювання кількох автомобілів.
- Тому можливе голодування.
Приклад тупика
Що таке голодування?
Голодування — це ситуація, коли процеси з низьким пріоритетом блокуються, тоді як процеси з високим пріоритетом виконуються. У будь-якій системі запити на ресурси з високим та низьким пріоритетом відбуваються динамічно. Тому потрібна певна політика, щоб вирішувати, хто і коли отримує послуги.
З деякими алгоритмами певні процеси можуть не отримати бажаного сервісу, навіть якщо вони не перебувають у глухому куті. Голодування виникає, коли деякі потоки роблять спільні ресурси недоступними протягом тривалого періоду часу.
Приклад голодування
Наприклад, об'єкт пропонує синхронізований метод, який, ймовірно, займе багато часу для повернення. Якщо один потік часто використовує цей метод, інші потоки, яким також потрібен частий синхронізований доступ до того ж об'єкта, часто блокуються.
Різниця між Deadlock, Starvation і Livelock
- Взаємоблокування — це ситуація, яка виникає в ОС, коли процес переходить у стан очікування, оскільки запитуваний ресурс займає інший процес, що очікує.
- З іншого боку, активне блокування майже схоже на глухий кут, за винятком того, що стани процесів, що беруть участь у активному блокуванні, завжди змінюються у відповідь один на одного, при цьому жоден з них не прогресує.
- Отже, livelock — це унікальний випадок нестачі ресурсів.


