Problém obědvajících filozofů: Porovnání verzí
Smazaný obsah Přidaný obsah
m robot změnil: es:Problema de la cena de los filósofos |
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í]] (
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
=== Řešení Chandel
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)
▲'''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í.
▲'''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.
|