예제 #1
0
        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} подстрижен и довольный уходит домой");
        }
예제 #2
0
        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);
        }