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"?
Répondre
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.
- 1. Où puis-je commencer à écrire/utiliser un moteur de simulation physique 3D?
- 2. Coder la question architecturale
- 3. comment reseed table pour commencer à la PK 2?
- 4. Pour commencer à utiliser Boost.Test
- 5. Comment commencer à apprendre à programmer dans Flex?
- 6. Simulation Monte Carlo dans la prévision?
- 7. Commencer avec la programmation audio
- 8. Quelle est la meilleure façon de commencer à utiliser Mylyn?
- 9. Simulation de ByteArrays à l'aide d'ActionScript 2?
- 10. ASP.NET MVC Routage pour commencer à la page html
- 11. Simulation de couple et de moment angulaire
- 12. nmake - simulation de la fonction eval
- 13. Simulation d'un BlueScreen
- 14. Simulation par glisser-déposer?
- 15. comment coder des thèmes pour linux?
- 16. Où puis-je commencer à développer pour la mûre?
- 17. htaccess Domaine Simulation
- 18. Comment dois-je commencer avec le serveur OAuth à PHP
- 19. Comment commencer à concevoir des portlets dans Eclipse?
- 20. Comment commencer à créer une API d'application dans .NET
- 21. Comment commencer à écrire un outil de couverture de code?
- 22. Comment puis-je commencer à créer un service Web Java?
- 23. Comment devrais-je commencer à apprendre sur ADO.NET Entity Framework?
- 24. défilement KTextEdit pour commencer
- 25. Bluray Burner à Java - Par où commencer?
- 26. Tutoriels pour commencer à apprendre Actionscript 3.0?
- 27. Où commencer avec la construction d'un buvard
- 28. BlackBerry - Simulation d'un événement KeyPress
- 29. Comment puis-je commencer avec Tkinter?
- 30. Simulation de raccourcis clavier dans l'événement textbox_keydown à gérer?
Hmmm ... Je donnerais probablement des "diners" comme des fils ... bien qu'ils puissent être des objets enveloppant des fils. – paxos1977