コード例 #1
0
        public void Manicure(Client client)
        {
            Console.WriteLine("Klient " + client.name + " idzie do manikiurzystki " + name);

            lock (this)
            {
                Console.WriteLine("Manikiurzystka " + name + " rozpoczyna manicure (spotkanie) klienta " + client.name);
                Console.WriteLine("Manicure bedzie trwac 15 minut");
                //client.manicure_wanted = false;
                if (boss.waiting_room.Contains(client))
                {
                    boss.waiting_room.Remove(client);
                }
                entryBegin.Set();   // sygnalizacja zdarzenia entryBegin (czyli rozpoczęcia spotkania Manicure)
                entryEnd.WaitOne(); //blokada wątku wywołującego do czasu zakończenia spotkania
                Thread.Sleep(1500); //manicure trwa 15 minut (1.5 sek)
                Console.WriteLine("Manikiurzystka " + name + " koniec manicure (spotkania) klienta " + client.name);
            }                       //opuszczenie sekcji krytycznej => następny wątek może rozpocząć spotkanie
            client.manicure_done = true;
            if (client.haircut_done)
            {
                Console.WriteLine("Klient " + client.name + " wychodzi.");
                boss.ClientLeaves(out client);
            }
        }
コード例 #2
0
        public void Haircut(Client client)
        {
            Random rand = new Random();
            int    time = rand.Next(1000, 3001);

            Console.WriteLine("Klient " + client.name + " idzie do fryzjera " + name);

            lock (this)
            {
                Console.WriteLine("Fryzjer " + name + " rozpoczyna strzyzenie (spotkanie) klienta " + client.name);
                Console.WriteLine("Strzyzenie bedzie trwac " + time / 100 + " minut");

                if (boss.waiting_room.Contains(client))
                {
                    boss.waiting_room.Remove(client);
                }
                entryBegin.Set();   // sygnalizacja zdarzenia entryBegin (czyli rozpoczęcia spotkania Haircut)
                entryEnd.WaitOne(); //blokada wątku wywołującego do czasu zakończenia spotkania
                Thread.Sleep(time); //strzyżenie trwa między 10-30 minut (1-3 sek)
                Console.WriteLine("Fryzjer " + name + " koniec strzyżenia (spotkania) klienta " + client.name);
            }                       //opuszczenie sekcji krytycznej => następny wątek może rozpocząć spotkanie
            client.haircut_done = true;
            if ((client.manicure_wanted && client.manicure_done) || !client.manicure_wanted)
            {
                Console.WriteLine("Klient " + client.name + " wychodzi.");
                boss.ClientLeaves(out client);
            }
        }