public void TakeClient(Client client) { bool wantManicure = client.manicure_wanted; bool entered = false; entered = CheckWaitingRoom(client); if (!entered) { Console.WriteLine("Klient " + client.name + " wychodzi."); ClientLeaves(out client); } else { if (lastBarber < barbers.Count - 1) lastBarber++; else lastBarber = 0; barbers[lastBarber].Haircut(client); if(wantManicure) { if (lastManicurist < manicurists.Count - 1) lastManicurist++; else lastManicurist = 0; manicurists[lastManicurist].Manicure(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); } }
private static void CreateClient(Boss boss, int counter) { Client client = new Client(counter, boss); if (client.manicure_wanted) Console.WriteLine("Przybył klient " + client.name + " na strzyżenie i manicure"); else Console.WriteLine("Przybył klient " + client.name + " tylko na strzyżenie"); client.Start(); }
public bool CheckWaitingRoom(Client client) { Console.WriteLine(client.name + " Sprawdzam dostępność poczekalni"); if (waiting_room.Count < waiting_room.Capacity) { Console.WriteLine(client.name + " Wolne miejsce. Wchodzę do poczekalni."); waiting_room.Add(client); return true; } else { Console.WriteLine(client.name + " Nie ma miejsca w poczekalni."); return client.WaitForRoom(this); } }
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); } }
bool CheckFreeBarbers(Client client) { return false; }
public void ClientLeaves(out Client client) { client = null; }