Filosofenprobleem: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
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]].
==Het probleem==
Vijf filosofen zitten aan een ronde tafel om een enorme kom met [[spaghetti]].
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.
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.
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]].
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.
|