Filosofenprobleem: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Maiella (overleg | bijdragen)
details
poging de uitleg te verhelderen (ik was het niet eens met het gebruik van de voltooid tegenwoordige tijd)
Regel 1:
[[Afbeelding:Dining philosophers.png|thumb|200px|Illustratie bij het filosofenprobleem]]
In de [[informatica]] is het '''filosofenprobleem''' een aansprekend voorbeeld van de problematiek van [[gedistribueerd programmeren|synchronisatie]].
InHet probleem is in [[1965]] heeftdoor [[Edsger Dijkstra]] eenvoor examenvraaghet bedachteerst gesteld als tentamenvraag; die ging over vijf computers die toegang wildenwillen hebben tot vijf tape-drives. SnelDe daarnaherformulering heeftwaarin [[Tonycomputers Hoare]]en dittape-drives probleemdoor vertaaldfilosofen inen termenvorken vanzijn vijfvervangen dinerendeis filosofenkort daarna bedacht door [[Tony Hoare]].
 
==Het probleem==
Vijf filosofen zitten aan een ronde tafel om een enorme kom met [[spaghetti]].
Vijf filosofen zitten aan een tafel en kunnen twee dingen doen: [[spaghetti]] eten of filosoferen. Als ze eten kunnen ze niet denken en als ze denken kunnen ze niet eten. De spaghetti staat midden op een ronde tafel en om te eten heeft elke filosoof twee vorken nodig. Maar er zijn slechts vijf vorken. Zo heeft elke filosoof éen vork aan zijn linker en éen aan zijn rechterhand; de filosoof kan die oppakken, maar alleen een voor een.
Elke filosoof moet zo nu en dan spaghetti eten. (Een filosoof die niet aan het eten is, denkt na.)
 
Er liggen vijf vorken op tafel: een tussen elke twee filosofen.
Het probleem is nu om de filosofen zodanige instructies te geven dat ze niet zullen verhongeren.
Dit soort problemen zijn in het algemeen niet zo eenvoudig op te lossen.
 
Om te kunnen eten moet een filosoof beide vorken aan weerszijden in handen hebben.
Stel bijvoorbeeld dat elke denker als filosofie heeft: ik pak een vork zo gauw ik kan, als beide beschikbaar zijn eerst de linkervork; zo gauw ik beide vorken heb eet ik wat; dan leg ik de vorken weer neer. Op het eerste gezicht een redelijk plan, maar nu kan de situatie ontstaan dat elke filosoof de linkervork in de linkerhand heeft, eeuwig wachtend tot de rechtervork vrijkomt. Dit is een voorbeeld van '[[Deadlock_(situatie)|deadlock]]': er is helemaal geen voortgang in het systeem meer mogelijk. Elke filosoof zal verhongeren.
Een filosoof kan die vorken oppakken, maar alleen een voor een, en uiteraard alleen als de buurman niet op dat moment de vork in handen heeft. Een filosoof kan een opgepakte vork weer terugleggen.
 
Andere handelingen of observaties kunnen de filosofen niet verrichten.
 
Het probleem is nu om de filosofen zodanige instructies te geven (die dus alleen betrekking hebben op het oppakken en weer terugleggen van vorken aan weerszijde) dat er gegarandeerd geen filosoof zal verhongeren.
 
Dit is een voorbeeld van een probleem in het [[gedistribueerd programmeren]].
Dit soortZulke problemen zijn in het algemeen niet zo eenvoudig op te lossen.
 
Stel bijvoorbeeld dat elke denker de filosofie hanteert: ik pak een vork zo gauw ik kan, als beide beschikbaar zijn eerst de linkervork; zo gauw ik beide vorken in handen heb eet ik wat; dan leg ik de vorken weer neer.
Dat lijkt op het eerste gezicht een redelijk plan.
Helaas kan dan de situatie ontstaan dat elke filosoof de linkervork in de linkerhand heeft, en zal dan elke filosoof eeuwig blijven wachten tot de rechtervork vrijkomt.
De situatie is een voorbeeld van '[[Deadlock_(situatie)|deadlock]]': er is geen voortgang in het systeem meer mogelijk. Elke filosoof zal verhongeren.
 
Er zijn technieken om tot een oplossing te komen die een deadlock bewijsbaar voorkomen; Dijkstra heeft het probleem verzonnen om zulke technieken te demonstreren.