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); } }
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); } }