static void Main(string[] args) { Filosofos[0] = new Filosofo(100, 4, 0); Filosofos[0].Proceso = new Thread(FilosofoM); Filosofos[1] = new Filosofo(100, 0, 1); Filosofos[1].Proceso = new Thread(FilosofoM); Filosofos[2] = new Filosofo(100, 1, 2); Filosofos[2].Proceso = new Thread(FilosofoM); Filosofos[3] = new Filosofo(100, 2, 3); Filosofos[3].Proceso = new Thread(FilosofoM); Filosofos[4] = new Filosofo(100, 3, 4); Filosofos[4].Proceso = new Thread(FilosofoM); for (int i = 0; i < Tenedores.Length; i++) { Tenedores[i] = new Tenedor(); } for (int i = 0; i < Filosofos.Length; i++) { Filosofos[i].Nombre = "Filosofo" + (i + 1); Filosofos[i].Proceso.Start(Filosofos[i]); } //Filosofos[0].Proceso.Start(); //Filosofos[1].Proceso.Start(); //Filosofos[2].Proceso.Start(); //Filosofos[3].Proceso.Start(); //Filosofos[4].Proceso.Start(); }
public static void FilosofoM(object f) { Filosofo F = (Filosofo)f; while (true) { if (F.Estado == Filosofo.estado.Pensando) { Console.WriteLine("El " + F.Nombre + " esta Pensando..."); S1.WaitOne(); if (TomarTenedor(F.PrimerTenerdorIndex)) { F.PrimerTenedor = true; Console.WriteLine("El " + F.Nombre + " tomo un tenedor"); //Thread.Sleep(1000); foreach (Tenedor t in Tenedores) { Console.WriteLine(t.Disponible); } } if (TomarTenedor(F.SegundoTenedorIndex)) { F.SegundoTenedor = true; Console.WriteLine("El " + F.Nombre + " tomo un tenedor"); //Thread.Sleep(1000); foreach (Tenedor t in Tenedores) { Console.WriteLine(t.Disponible); } } if (F.PrimerTenedor != true || F.SegundoTenedor != true) { Console.WriteLine("El " + F.Nombre + " fallo en tomar un tenedor y dejo ambos"); F.PrimerTenedor = false; F.SegundoTenedor = false; DejarTenedores(F.PrimerTenerdorIndex); DejarTenedores(F.SegundoTenedorIndex); //Thread.Sleep(1000); } if (F.PrimerTenedor == true && F.SegundoTenedor == true) { F.Estado = Filosofo.estado.Comiendo; Console.WriteLine("El " + F.Nombre + " esta comiendo"); while (F.comida != 0) { F.comida--; Thread.Sleep(100); } DejarTenedores(F.PrimerTenerdorIndex); DejarTenedores(F.SegundoTenedorIndex); F.comida = 100; F.Estado = Filosofo.estado.Pensando; } S1.Release(); } Thread.Sleep(5000); } }