2008-09-06 21 views
6

Je ne suis pas un débutant en C# mais j'ai vraiment besoin d'augmenter ma compréhension, donc j'ai choisi un problème classique de blocage de code pour m'aider à apprendre certains des concepts les plus avancés de C#. Le Dining Philosophers Problem semble être un bon, mais j'ai besoin d'un peu d'aide pour commencer. Je sais que je dois aborder les «diners» comme des objets, mais pour simuler les retards aléatoires entre manger, devrais-je regarder à enfiler chaque dîner dans un fil séparé? Ai-je besoin d'une sorte de "maître" pour surveiller toutes les actions? Tout conseil général sur le concept de design est le bienvenu, mais j'aimerais faire la programmation de base comme un exercice. Merci!Comment commencer à coder la simulation "Dining Philosophers"?

+0

Hmmm ... Je donnerais probablement des "diners" comme des fils ... bien qu'ils puissent être des objets enveloppant des fils. – paxos1977

Répondre

6

Je pense que la meilleure approche pour simuler ce serait une classe Fork avec une méthode comme use() qui maintient la fourche (bool available = false) et un release() qui libère.

Une classe Philosopher avec getFork(Fork) et releaseFork(Fork) qui opère la tenue/libération de l'objet de fourche (me semble une minuterie serait bon dans une méthode useFork() afin que vous puissiez percevoir vraiment l'impasse.

Et pour dernier, un DinningTable (ou tout autre nom) classe qui crée des instances et faire le journal. Si vous prévoyez d'utiliser les threads, voici où vous devez mettre en place un fil pour chaque Philosopher concordante pour le Fork.

Comme suggestion, vous pourriez implémenter une classe Plate, tenant une quantité de spaghettis que la méthode Philosopher.useFork() inférieure pendant la période. De cette façon, vous pouvez voir quels Philosopher finit en premier.

Je vais laisser les implémentations pour vous, bien sûr, puisque votre objectif est d'apprendre C# ... dans mon expérience, vous feriez mieux d'apprendre à faire quelque chose de concret comme ces classes;) De plus, vous pouvez trouver beaucoup d'implémentations sur Google si vous voulez tricher ...

Je vous invite à partager le code après celui-ci. C'est une excellente référence d'étude.

Hope Cela vous aide.