Problém obědvajících filozofů: Porovnání verzí

Smazaný obsah Přidaný obsah
AlleborgoBot (diskuse | příspěvky)
m Styl, typo
Řádek 7:
Když filosofové (procesy) spolu nekomunikují nebo komunikují nesprávně, může se každý z nich rozhodnout, že vezme například levou hůlku. Teď chce každý z nich vzít pravou hůlku, ale ta je obsazena, takže filozof nemůže ani obědvat, ani filosofovat. Takový stav se nazývá [[uváznutí]] ([[deadlock]]). Musí tedy buď počkat, dokud se hůlka uvolní, nebo hůlku položit a zkusit to později znovu.
 
Jiným kritickým stavem je [[vyhladovění]] ([[{{Vjazyce2|en|''starvation]]''}}, {{Vjazyce2|cs|''stárnutí zdrojů''}}), které nastává, když se filozof nedostane po určité době k jídlu (resp. proces ke [[zdroj|zdrojům]]). Nastává například při velmi rychlých [[časový interval|intervalech]] jezení a filosofování.
 
Vyhladovělých by mohlo také nastat nezávisle na deadlocku, pokud je filozof neschopný získat obě hůlky během stejného časového úseku. Například můžeme uvažovat pravidlo, že filozof pustí jednu hůlku z ruky za 5 minut od okamžiku, kdy si jí vezme a čeká dalších 5 minut na to, aby udělal další pokus najíst se. Tento režim eliminuje možnost deadlocku (systém se vždy může dostat do jiného stavu), ale stále je problémem [[livelock]]. Když totiž všichni filozofové položí najednou hůlky a pak si je za 5 minut opět vezmou, situace se opakuje, znovu mají po jedné hůlce všichni filosofové.
Řádek 26:
Další jednoduché řešení dostaneme vyhrazením částečného pořadí, nebo hierarchie pro zdroje (v tomto případě hůlky), a zřízením konvence, že všechny zdroje budou dosahované v určitém pořadí a v opačném pořadí uvolněné. V našem případě budou zdroje (hůlky) očíslované od 1 po 5 v nějakém pořadí a každý filozof si vždy vezme nejdříve hůlku s menším číslem a až potom hůlku s větším číslem. Pak vždy položí nejdříve hůlku s vyšším číslem, následně hůlku s menším číslem. Pokud tedy 5 filozofů simultánní zvedne hůlku s menším číslem, tak zůstane na stole hůlka s největším číslem, takže 5. filozof bude bez hůlky. Navíc pouze jeden z filozofů bude mít přístup k oběma hůlkám. Když dojí, pustí obě hůlky, přičemž tu hůlku s nižším číslem pustí dříve, což umožní, aby se najedl filozof sedící vedle něj.
 
Toto řešení i navzdory vyhýbání se deadlock-omdeadlokům není příliš praktické, speciálně v případě, pokud neznáme předem používanou množinu zdrojů. Například, pokud program drží zdroje 3, a 5 a potřebuje ještě zdroj 2, musí vypustit zdroj 5, pak 3, aby mohl požádat o 2 a opět požádat o zdroje 3 a 5 v tomto pořadí. Právě proto je tento způsob velmi neefektivní.
 
=== Řešení Chandel / -Misra Řešení ===
 
V roce 1984, K. Mani Chandel a J. Misra navrhli jiné řešení problému obědvajících filosofů, aby povolili libovolnému počtu programů (číslovaných P1, ..., Pn) bojovatsoutěžit o libovolný počet zdrojů (číslovaných R1, ..., Rm). Na rozdíl od Dijkstrova řešení, tato označení mohou být libovolná. Uvědomme si, že toto není skutečný problém obědvajících filozofů, protože '''vyžaduje''' jejich vzájemnou komunikaci.
 
'''1.'''# Pro každý pár filosofů válčících o zdroj vytvoří hůlku a dají ji filozofovi s nižším ID. Každá hůlka může být buď špinavá, nebo čistá. Na začátku je každá hůlka špinavá.
'''2.'''# V případě, že chce filozof použít množinu zdrojů, musí dostat hůlky od svých soupeřících sousedů. Pro všechny takové hůlky zašle žádanku.
'''3.'''# Filozof, který obdrží požadavek si hůlku nechá, pokud je čistá a v opačném případě ji přenechá žádajícímu filozofovi. Předtím, než tuto hůlku zašle filozofovi, ji nejdříve očistí.
'''2.''' V případě, že chce filozof použít množinu zdrojů, musí dostat hůlky od svých soupeřících sousedů. Pro všechny takové hůlky zašle žádanku.
'''4.'''# Potom, jako filozof dojí, všechny jeho hůlky jsou špinavé. Pokud nějaký filozof dříve požádal o hůlku, filozof, který ji momentálně vlastní, ji očistí a pošle.
'''3.''' Filozof, který obdrží požadavek si hůlku nechá, pokud je čistá a v opačném případě ji přenechá žádajícímu filozofovi. Předtím, než tuto hůlku zašle filozofovi, ji nejdříve očistí.
 
'''4.''' Potom, jako filozof dojí, všechny jeho hůlky jsou špinavé. Pokud nějaký filozof dříve požádal o hůlku, filozof, který ji momentálně vlastní, ji očistí a pošle.
 
Toto řešení umožňuje velké množství paralelních programů a vyřeší libovolně velký problém s předpokladem, že každé vlákno potřebuje právě jeden zdroj v čase.