KDP/Lab 1 nadoknada 2022

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu
Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.

Nadoknada prve laboratorijske vežbe 2022. godine održana je 22. juna. Ispod se nalazi postavka zadatka za grupu N-A, dok su se u grupi N-B kao sinhronizacione primitive koristili regioni i katanci.

Postavka

Potrebno je napisati Java aplikaciju koja pronalazi sve one filmovi koji imaju isti broj režisera kao i film koji ima maksimalan broj režisera. Rešenje mora biti maksimalno konkurentno i otporno na prekide. Dozvoljeno je dodavati nove redove u dati kostur aplikacije i dodavati argumente konstruktorima, ali nije dozvoljeno brisati postojeće redove.

Delovi aplikacije:

  • Klasa Producer obrađuje ulaznu datoteku sa filmovima i informacije o svakom pojedinačnom filmu ubacuje u deljeni objekat za dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Podaci o filmovima se čitaju red po red iz arhive sa filmskim režiserima i scenaristima (title.crew.tsv.gz). Deljeni objekat koji se ovde koristi mora koristiti monitore za sinhronizaciju, koji moraju biti FIFO.
  • Klasa Consumer obrađuje filmove iz deljenog objekta i rezultate obrade na kraju prosleđuje na dalju obradu. Oba klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o nekom filmu iz deljenog objekta i traži lokalni maksimum broja režisera. Lokalno čuva informacije o svim svojim obrađenim filmovima. Kada više ne bude bilo filmova za dalju obradu, informacije o filmovima sa lokalnim maksimumom broja režisera prosleđuje dalje samo ukoliko je pronađeni lokalni maksimum jednak globalnom maksimumu režisera, koristeći sledeći deljeni objekat. Dozvoljeno je koristiti još jedan deljeni objekat za ovu sinhronizaciju, ukoliko je potrebno, i u tom slučaju treba da koristi semafore za sinhronizaciju. Dodatno, Consumer na svakih N (zadaje se) obrađenih filmova, kao i na kraju, šalje informaciju o broju obrađenih filmova koristeći poseban deljeni objekat.
  • Klasa Combiner prikuplja filmove sa maksimalnim brojem režisera. Ova klasa obradu obavlja u svom toku kontrole. Klasa preuzima podatke iz deljenog objekta i nakon završene obrade rezultat ubacuje u sledeći deljeni objekat.
  • Klasa Printer periodično (zadaje se) štampa informacije o broju filmova koje su obradile sve instance klase Consumer, sve dok se ne prikupe konačni podaci, i na kraju štampa njih štampa[sic] na osnovu podataka koje je dostavila klasa Combiner. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja sadrži informacije o filmovima sa istim brojem režisera kao i film sa maksimalnim brojem režisera.
  • Klasa Main testira ovaj sistem. Klasa u svojoj početnoj main funkciji kreira sve potrebne deljene objekte, pokreće jednu instancu klase Producer, veći (podesiv) broj instanci klase Consumer, jednu instancu klase Combiner i jednu instancu klase Printer. Nakon kompletno završene obrade, štampa koliko je iznosilo ukupno vreme obrade za dati broj niti koje rade obradu.
  • Nijedna klasa niti (Producer, Consumer, Combiner, Printer) ne sme da zna za broj instanci klase Consumer!

Rešenje