Pregunta

No soy un principiante en C#, pero realmente necesito aumentar mi comprensión, así que elegí un problema de punto muerto clásico para codificar y ayudarme a aprender algunos de los conceptos más avanzados de C#.El El problema de los filósofos al cenar Parece bueno, pero necesito un poco de ayuda para empezar.Sé que necesito acercarme a los "comensales" como objetos, pero para simular los retrasos aleatorios entre las comidas, ¿debería tratar de enhebrar con cada comensal en un hilo separado?¿Necesito algún tipo de "maestro" para monitorear todas las acciones?Cualquier consejo sobre un concepto de diseño general es bienvenido, pero me gustaría hacer la programación básica como ejercicio.¡Gracias!

¿Fue útil?

Solución

Creo que el mejor enfoque para simularlo sería un Fork clase con un método como use() que sostiene el tenedor (bool available = false) y un release() que lo libera.

A Philosopher clase con getFork(Fork) y releaseFork(Fork) que opera la retención/liberación del objeto Fork (me parece que un temporizador sería bueno en un método useFork() para que realmente puedas percibir el punto muerto.

Y por último un DinningTable (o cualquier otro nombre) clase que crea instancias y realiza el registro.Si planea utilizar subprocesos, aquí es donde debe implementar un subproceso para cada Philosopher concurriendo para el Fork.

Como sugerencia, podrías implementar un Plate Clase, sosteniendo una cantidad de espaguetis que el Philosopher.useFork() método más bajo durante el período de tiempo.De esta manera podrás ver cuál Philosopher termina primero.

Dejaré las implementaciones para ti, por supuesto, ya que tu objetivo es aprender C#...En mi experiencia, es mejor que aprendas haciendo algo concreto como estas clases ;) Además, puedes encontrar muchas implementaciones en Google si quieres hacer trampa...

Te invito a compartir el código que sigue.Es una gran referencia de estudio.

Espero que esto te ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top