public Miasto(char nazwa, int iloscOkienek, int iloscMiast) { this.nazwa = nazwa; skrzynki = new Skrzynka[iloscMiast]; for (int i = 0; i < iloscMiast; i++) { skrzynki[i] = new Skrzynka(); skrzynki[i].miasto = (char)(i + 65); } okienka = new Okienko[iloscOkienek]; for (int i = 0; i < iloscOkienek; i++) { okienka[i] = new Okienko(); } kierowniczka = new Kierowniczka(okienka, skrzynki); kierowniczka.pracownicy = pracownicy; kierowniczka.miasto = nazwa; kierowniczka.klienci = klienci; kierowniczka.dostawczakiDoRozladunku = dostawczakiDoRozladunku; kierowniczka.dostawczakiDoZaladunku = dostawczakiDoZaladunku; lock (miasta) { miasta.Add(this); } }
public void ZamknijOkienko() { coRobie = Zajety.zamknijOkienko; if (okienko != null) { okienko.zajete = false; Thread.MemoryBarrier(); okienko = null; Thread.MemoryBarrier(); } else { coMaszRobic = Zajety.wolny; } }
public void Sortuj() { coRobie = Zajety.sortuje; Okienko tymczasowe = null; Przesylka tymczasowa; mutSort.WaitOne(); for (int i = 0; i < okienka.Count(); i++) { if (okienka[i].skrzynka.Count != 0) { tymczasowe = okienka[i]; break; } } if (tymczasowe != null) { tymczasowe.mutOkienko.WaitOne(); tymczasowa = tymczasowe.skrzynka.Dequeue(); tymczasowe.mutOkienko.ReleaseMutex(); mutSort.ReleaseMutex(); Thread.Sleep(100 + (int)(tymczasowa.masa * 10)); for (int i = 0; i < skrzynki.Length; i++) { if (skrzynki[i].miasto == tymczasowa.miasto) { skrzynki[i].mutSkrz.WaitOne(); skrzynki[i].zaladunek.Enqueue(tymczasowa); skrzynki[i].mutSkrz.ReleaseMutex(); break; } } } else { coMaszRobic = Zajety.wolny; mutSort.ReleaseMutex(); } }