KDP/Lab 1 nadoknada 2022
< КДП
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 klaseConsumer
, sve dok se ne prikupe konačni podaci, i na kraju štampa njih štampa[sic] na osnovu podataka koje je dostavila klasaCombiner
. 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 klaseProducer
, veći (podesiv) broj instanci klaseConsumer
, jednu instancu klaseCombiner
i jednu instancu klasePrinter
. 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!