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