Livelock: Jaký je, příklad, rozdíl s Deadlock
⚡ Chytré shrnutí
Livelock je situace souběžnosti, kdy procesy neustále mění své stavy v reakci na sebe navzájem, ale nedosahují žádného skutečného pokroku, zůstávají aktivní a spotřebovávají cykly CPU, aniž by kdy dokončily své úkoly nebo se zablokovaly.

Co je Livelock?
A livelock je situace, kdy je žádost o exkluzivní zámek opakovaně odmítnuta, protože mnoho z nich se překrýváping Sdílené zámky se neustále vzájemně ruší. Procesy neustále mění svůj stav, což jim brání v dokončení úkolu.
Příklady Livelocku
Příklad 1:
Nejjednodušším příkladem Livelocku jsou dva lidé, kteří se setkají tváří v tvář na chodbě a oba se ustoupí, aby nechali toho druhého projít. Pohybují se ze strany na stranu, aniž by se jakkoli posunuli vpřed, protože se pohybují stejným směrem ve stejnou dobu. Zde se nikdy nekříží.
Příklad 2:
Na obrázku výše každý ze dvou procesů potřebuje dva zdroje a pomocí primitivního dotazování se snaží získat potřebné zámky. Pokud pokus selže, metoda se pokusí znovu.
- Proces A drží zdroj Y
- Proces B obsahuje zdroj X
- Proces A vyžaduje zdroj X
- Proces B vyžaduje zdroj Y
Předpokládejme, že proces A běží jako první a získá zdroj X, a poté běží proces B a získá zdroj Y. Bez ohledu na to, který proces běží jako první, žádný z nich nedosáhne dalšího pokroku.
Ani jeden z těchto dvou procesů však není blokován. Opakovaně spotřebovávají prostředky CPU, aniž by dosáhly jakéhokoli pokroku, přesto se nikdy nezastaví kvůli bloku zpracování.
Tato situace proto není zablokování, protože ani jeden proces není blokován; místo toho čelíme situaci ekvivalentní deadlocku, který se nazývá LIVELOCK.
Co vede k Livelocku?
Živý uzamčení (Livelock) je vázáno na počet procesů, které systém povoluje, což je definováno celkovým počtem záznamů v tabulce procesů. Tyto sloty v tabulce procesů jsou proto považovány za konečné zdroje. Když se procesy opakovaně pokoušejí o tyto omezené zdroje a zároveň se navzájem neustále ustupují, žádný z nich nepokročí a systém vstoupí do stavu živého uzamčení (livelock).
Co je Deadlock?
A zablokování je situace, která nastává v operačním systému, když proces přejde do stavu čekání, protože jiný čekající proces drží požadovaný zdroj. Deadlock je běžný problém v multiprocessingu, kde několik procesů sdílí specifický typ vzájemně se vylučujícího zdroje, známý jako soft lock nebo software.
Příklad Deadlock
- Příkladem z reálného světa by mohl být provoz, který jede pouze jedním směrem.
- Zde je most považován za zdroj.
- Když dojde k zablokování, lze jej snadno vyřešit, pokud jedno auto zacouvá (využívá zdroje a vrací se zpět).
- Pokud dojde k uváznutí, může být nutné zálohovat několik vozů.
- Proto je možné hladovění.
Příklad Deadlock
Co je to hladovění?
Hladovění je situace, kdy jsou procesy s nízkou prioritou blokovány, zatímco procesy s vysokou prioritou běží. V jakémkoli systému se požadavky na zdroje s vysokou a nízkou prioritou neustále dynamicky vyskytují. Proto je nutná určitá politika, která určí, kdo a kdy bude obsloužen.
U některých algoritmů nemusí určité procesy získat požadovanou službu, i když nejsou v deadlocku. K hladovění dochází, když některá vlákna znemožní sdílené zdroje po delší dobu.
Příklad hladovění
Například objekt nabízí synchronizovanou metodu, jejíž návratová hodnota bude pravděpodobně trvat dlouho. Pokud jedno vlákno tuto metodu často používá, ostatní vlákna, která také potřebují častý synchronizovaný přístup ke stejnému objektu, jsou často blokována.
Rozdíl mezi Deadlock, Hladověním a Livelockem
- Zablokování je situace, která nastane v operačním systému, když proces přejde do stavu čekání, protože požadovaný zdroj je držen jiným čekajícím procesem.
- Livelock je na druhou stranu téměř podobný deadlocku, až na to, že stavy procesů zapojených do livelocku se neustále mění v reakci na sebe navzájem, aniž by se jakýkoli z nich progressoval.
- Livelock je tedy unikátním případem nedostatku zdrojů.


