Livelock: cos'è, esempio, differenza con Deadlock
⚡ Riepilogo intelligente
Livelock è una situazione di concorrenza in cui i processi continuano a cambiare stato in risposta l'uno all'altro, ma senza compiere alcun progresso reale, rimanendo attivi e consumando cicli della CPU senza mai completare le proprie attività o bloccarsi.

Cos'è LiveLock?
A livelock è una situazione in cui una richiesta di blocco esclusivo viene ripetutamente negata, poiché molte sovrapposizioniping I blocchi condivisi continuano a interferire tra loro. I processi cambiano continuamente stato, impedendo loro di completare l'attività.
Esempi di Livelock
Esempio 1:
L'esempio più semplice di Livelock è quello di due persone che si incontrano faccia a faccia in un corridoio e si spostano entrambe per far passare l'altra. Continuano a muoversi da un lato all'altro senza fare alcun progresso perché si muovono nella stessa direzione e nello stesso momento. In questo caso, non si incrociano mai.
Esempio 2:
Nell'immagine qui sopra, ciascuno dei due processi necessita di due risorse e utilizza un meccanismo di polling primitivo per tentare di acquisire i blocchi necessari. Se un tentativo fallisce, il metodo riprova.
- Il processo A detiene la risorsa Y
- Il processo B detiene la risorsa X
- Il processo A richiede la risorsa X
- Il processo B richiede la risorsa Y
Supponiamo che il processo A venga eseguito per primo e acquisisca la risorsa X, e che successivamente venga eseguito il processo B e acquisisca la risorsa Y. Indipendentemente da quale processo venga eseguito per primo, nessuno dei due compie ulteriori progressi.
Tuttavia, nessuno dei due processi è bloccato. Consumano ripetutamente risorse della CPU senza compiere alcun progresso, eppure non si arrestano mai a causa di un blocco di elaborazione.
Pertanto questa situazione non è una punto morto, perché nessun singolo processo è bloccato; ci troviamo invece di fronte a una situazione equivalente a un deadlock, che viene chiamata LIVELOCK.
Cosa porta a Livelock?
Il livelock è legato al numero di processi consentiti da un sistema, definito dal numero totale di voci nella tabella dei processi. Questi slot nella tabella dei processi sono quindi considerati risorse finite. Quando i processi tentano ripetutamente di accedere a queste risorse limitate, cedendo continuamente il controllo l'uno all'altro, nessuno di essi riesce a progredire e il sistema entra in un livelock.
Che cosa è Deadlock?
A punto morto Il deadlock è una situazione che si verifica in un sistema operativo quando un processo entra in uno stato di attesa perché un altro processo in attesa sta occupando la risorsa richiesta. Il deadlock è un problema comune nel multiprocessing, dove diversi processi condividono un tipo specifico di risorsa mutuamente esclusiva, nota come soft lock o blocco software.
Esempio di stallo
- Un esempio concreto potrebbe essere il traffico che si muove in un'unica direzione.
- Qui un ponte è considerato una risorsa.
- Quando si verifica una situazione di stallo, può essere risolta facilmente se una delle auto fa retromarcia (prelazione delle risorse e rollback).
- In caso di stallo, potrebbe essere necessario far retromarcia su più auto.
- Pertanto, la morte per fame è possibile.
Esempio di stallo
Cos'è la fame?
La starvation è una situazione in cui i processi a bassa priorità vengono bloccati mentre quelli ad alta priorità procedono. In qualsiasi sistema, le richieste di risorse ad alta e bassa priorità si susseguono dinamicamente. Pertanto, è necessaria una politica per decidere chi viene servito e quando.
Con alcuni algoritmi, determinati processi potrebbero non ottenere il servizio desiderato anche se non sono in una situazione di deadlock. La starvation si verifica quando alcuni thread rendono indisponibili le risorse condivise per un lungo periodo di tempo.
Esempio di fame
Ad esempio, un oggetto offre un metodo sincronizzato che probabilmente impiegherà molto tempo per restituire un risultato. Se un thread utilizza frequentemente questo metodo, altri thread che necessitano anch'essi di accedere frequentemente e in modo sincronizzato allo stesso oggetto vengono spesso bloccati.
Differenza tra deadlock, starvation e livelock
- Un deadlock è una situazione che si verifica in un sistema operativo quando un processo entra in uno stato di attesa perché la risorsa richiesta è occupata da un altro processo in attesa.
- Un livelock, d'altra parte, è quasi simile a un deadlock, tranne per il fatto che gli stati dei processi coinvolti in un livelock cambiano continuamente in risposta l'uno all'altro, senza che nessuno progredisca.
- Pertanto, il problema del livellamento è un caso unico di scarsità di risorse.


