Beispiel #1
0
 public void service(Custommer c)
 {
     IsFree = false;
     Console.WriteLine("Urzędnik " + Id + " Obsługuje klienta " + c.Name);
     Thread.Sleep(rand.Next() % 300 + 1000);
     Console.WriteLine("Klient obsłużony " + c.Name);
     IsFree = true;
 }
        public void AddToQueue(Custommer c)
        {
            semaphore.WaitOne();//czy możemy wejść;
            Officer actualOfficer = null;

            lock (officer) { //pewność że oficer nie będzie przydzielony dwum osobom
                foreach (Officer o in officer)
                {
                    if (o.IsFree)
                    {
                        actualOfficer = o;
                        o.IsFree      = false;
                        break;
                    }
                }
            }
            actualOfficer.service(c);
            semaphore.Release(); //zwalniamy miejsce w okienku
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            int numberOfOfficers = 3;
            int numberOfClients  = 60;

            PostOffice postOffice = new PostOffice(numberOfOfficers);

            for (int c = 0; c < numberOfClients; c++)
            {
                Custommer cust = new Custommer()
                {
                    Name = "" + (char)(c + 65)
                };
                new Thread(() => {
                    Console.WriteLine("Klient " + cust.Name + " przyszedł na pocztę");
                    postOffice.AddToQueue(cust);
                }).Start();
            }

            Console.ReadLine();
        }