public void ComerEPensar(Garfo g1, Garfo g2)
 {
     while (true)
     {
         Pensar();
         Comer(g1, g2);
     }
 }
예제 #2
0
        public Restaurante(int nFilosofos)
        {
            vetorFilosofos = new Filosofo[nFilosofos];
            vetorGarfos    = new Garfo[nFilosofos];
            vetorThreads   = new Thread[nFilosofos];

            for (int a = 0; a < vetorFilosofos.Length; a++)
            {
                vetorFilosofos[a] = new Filosofo(a);
                vetorGarfos[a]    = new Garfo(a);
            }

            OrganizarGarfos();
        }
        private void Comer(Garfo g1, Garfo g2)
        {
            Console.WriteLine("\nFilosofo {0} aguarda os garfos ficarem disponíveis", ID);
            g1.mutex.WaitOne();
            g2.mutex.WaitOne();

            Random r            = new Random();
            int    tempoComendo = r.Next(0, 10000);

            Console.WriteLine("\nFilosofo {0} está comendo com os garfos {1} e {2}", ID, g1.NumGarfo, g2.NumGarfo);
            Thread.Sleep(tempoComendo);
            Console.WriteLine("\nFilosofo {0} terminou de comer e liberou os garfos {1} e {2}", ID, g1.NumGarfo, g2.NumGarfo);

            g1.mutex.ReleaseMutex();
            g2.mutex.ReleaseMutex();
        }