2008-09-06 8 views
6

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"?

+0

Hmmm ... probablemente modelaría los "comensales" como hilos ... aunque podrían ser objetos envolviendo hilos. – paxos1977

Respuesta

6

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.