Пример #1
0
        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);
            }
        }
Пример #2
0
 public void ZamknijOkienko()
 {
     coRobie = Zajety.zamknijOkienko;
     if (okienko != null)
     {
         okienko.zajete = false;
         Thread.MemoryBarrier();
         okienko = null;
         Thread.MemoryBarrier();
     }
     else
     {
         coMaszRobic = Zajety.wolny;
     }
 }
Пример #3
0
        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();
            }
        }