No soy un principiante en C#, pero realmente necesito aumentar mi comprensión, así que elegí un problema clásico de interbloqueo para codificar y ayudarme a aprender algunos de los conceptos más avanzados de C#. El Dining Philosophers Problem parece uno bueno, pero necesito un poco de ayuda para comenzar. Sé que necesito acercarme a los "comensales" como objetos, pero para simular las demoras aleatorias entre comer, ¿debo mirar a enhebrar con cada comensal en un hilo separado? ¿Necesito algún tipo de "maestro" para controlar todas las acciones? Cualquier consejo de concepto de diseño general es bienvenido, pero me gustaría hacer la programación ronca como un ejercicio. ¡Gracias!¿Cómo comenzar a codificar la simulación "Cenando Filósofos"?
Respuesta
creo que el mejor enfoque para simular que sería una clase Fork
con un método como use()
que sostiene el tenedor (bool available = false
) y un release()
que lo suelte.
Una clase Philosopher
con getFork(Fork)
y releaseFork(Fork)
que opera la retención/liberación del objeto Tenedor (me parece un temporizador sería bueno en un método useFork()
por lo que se puede percibir realmente el punto muerto.
Y por último una DinningTable
(o cualquier otro nombre) de clase que crea instancias, y hacer el registro. Si va a utilizar hilos, aquí es donde se debe aplicar un hilo para cada Philosopher
concurrente para el Fork
.
Como sugerencia, usted podría implementar una clase Plate
, sosteniendo una cantidad de espagueti que el método Philosopher.useFork()
baje durante el período de tiempo. De esta forma, puede ver qué Philosopher
termina primero.
Voy a dejar las implementaciones para usted, por supuesto, ya que su objetivo es aprender C# ... en mi experiencia, es mejor que aprenda a hacer algo concreto como estas clases;) Además, puede encontrar muchas implementaciones en Google si quiere hacer trampa ...
Lo invito a compartir el código después de él. Es una gran referencia de estudio.
Espero que esto te ayude.
- 1. ¿Cómo debo comenzar a codificar una aplicación web de Skype?
- 2. Erlang - Comedor Filósofos errores
- 3. ¿Cómo comenzar a aprender a programar, codificar o leer el kernel de Linux?
- 4. cómo comenzar a codificar y configurar un servidor web con Java?
- 5. cómo codificar los controladores?
- 6. ¿Cómo comenzar a usar ndepend?
- 7. Cómo comenzar a probar (jMock)
- 8. comenzar mongodb y volver a la terminal
- 9. Codificar objeto a JSON
- 10. Cómo codificar caracteres de Oracle a XML?
- 11. Cómo codificar voz grabada a ogg vorbis?
- 12. Simulación física inicial
- 13. Simulación de conexión a Internet lenta
- 14. ¿Cómo debo comenzar a aprender sobre SAP?
- 15. cómo comenzar a usar Google app-engine?
- 16. ¿Cómo comenzar a usar Jemmy 3?
- 17. MVC.NET comenzar a descargar
- 18. ¿Cómo comenzar a modelar una aplicación web?
- 19. Cómo comenzar a desarrollar el software Maemo
- 20. ¿Cómo comenzar a trabajar con GwtQuery?
- 21. Cómo comenzar a integrar pyflakes con Hudson
- 22. ¿Cómo debería comenzar a jugar con 3D?
- 23. ¿Cómo comenzar a programar un microcontrolador?
- 24. ¿Cómo comenzar a usar WCF/WPF?
- 25. ¿Cómo comenzar a usar Motosierra para Log4j?
- 26. ¿Cómo comenzar a escribir aplicaciones para iPad?
- 27. Cómo codificar un módulo kernel de Linux?
- 28. Cómo codificar para multitouch
- 29. Simulación GPS en iOS
- 30. ¿Cómo no codificar contraseñas?
Hmmm ... probablemente modelaría los "comensales" como hilos ... aunque podrían ser objetos envolviendo hilos. – paxos1977