public void GetHaircut() { Chair chair; bool seatTaken; lock (barbershop.FindChairLocker) { chair = barbershop.FindFreeChair(); seatTaken = chair != null && chair.TrySeat(this); } if (!seatTaken) { Logger.Write($"{Name} не смог подстричься, в парикмахерской не оказалось свободных мест"); return; } var sw = new Stopwatch(); sw.Start(); Logger.Write($"{Name} ожидает барбера"); do { lock (barbershop.ServeClientLocker) { if (Barber != null) { break; } if (sw.Elapsed > waitTime) { chair.ToLeave(); Logger.Write($"{Name} не смог дождаться барбера за {waitTime.Seconds} секунд и ушел"); return; } } Thread.Sleep(10); } while (true); while (!Trimmed) { } chair.ToLeave(); Logger.Write($"{Name} подстрижен и довольный уходит домой"); }
private void Chill() { if (!barbershop.IsAlreadySeat(this)) { lock (barbershop.FindChairLocker) { Chair = barbershop.FindFreeChair(false); var tookFreeChair = Chair?.TrySeat(this) ?? false; if (tookFreeChair) { Logger.Write($"{Name} занял свободное кресло и отдыхает"); } } } Thread.Sleep(50); }