KDP/Lab 1 2022
< КДП
Pređi na navigaciju
Pređi na pretragu
- Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Prva laboratorijska vežba 2022. godine nosila je 10 bodova. Isti tekst ponovio se i na narednih nekoliko prvih laboratorijskih vežbi. Za razliku od laboratorijske vežbe za samostalnu vežbu, nije bio dat skelet koda.
Grupa 1
Postavka
Potrebno je napisati Java aplikaciju koja pronalazi broj još uvek aktivnih serija po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.
Delovi aplikacije:
- Klasa
Producerobrađuje ulaznu datoteku sa filmovima i informaciju o svakom pojedinačnom filmu ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili semafore u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o filmovima se čitaju red po red iz arhive sa filmovima (title.basics.tsv.gz). - Klasa
Consumerobrađuje informacije o dobijenom filmu i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o nekom filmu iz deljenog objekta. Čuva se samo broj serija koje su započele (startYearnije\N) a nisu završile (endYearje\N) po decenijama. Na svakih K (zadaje se) obrađenih filmova koje jedanConsumerobradi, ažurira informaciju o svom broju obrađenih filmova koristeći poseban poseban deljeni objekat. Kada ne bude bilo više filmova za obradu,Consumerprosleđuje svoj broj serija po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko monitora ili regiona u zavisnosti od grupe. - Klasa
Combinerna osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. 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
Printerna svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasaCombiner. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja sadrži deceniju i broj nezavršenih serija u toj deceniji. - Klasa
Testtestira ovaj sistem. Klasa u svojoj početnojmainmetodi kreira sve potrebne deljene objekte, pokreće jednu instancu klaseProducer, veći (podesiv) broj instanci klaseConsumer, jednu instancu klaseCombineri 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!
Rešenje
Grupa 2
Postavka
Potrebno je napisati Java aplikaciju koja pronalazi broj živih osoba koje su se bavile određenom profesijom po decenijama. Rešenje mora biti maksimalno konkurentno i otporno na prekide.
Delovi aplikacije:
- Klasa
Producerobrađuje ulaznu datoteku sa osobama i informaciju o svakoj pojedinačnoj osobi ubacuje u deljeni objekat za dalju obradu. Za implementaciju deljenog objekta koristiti Lock ili monitora u zavisnosti od grupe, ali tako da poštuju FIFO poredak. Ova klasa obradu obavlja u svom toku kontrole. Podaci o osobama se čitaju red po red iz arhive sa osobama (name.basics.tsv.gz). - Klasa
Consumerobrađuje informacije o dobijenoj osobi i rezultate obrade na kraju prosleđuje na dalju obradu. Ova klasa obradu obavlja u svom toku kontrole. Klasa čita informacije o osobama iz deljenog objekta. Čuva se samo broj osoba koje su još uvek žive (deathYearje\N) po zanimanjima i decenijama. Na svakih K (zadaje se) obrađenih osoba koje jedanConsumerobradi, ažurira informaciju o svom broju obrađenih osoba koristeći poseban poseban deljeni objekat. Kada ne bude bilo više osoba za obradu,Consumerprosleđuje svoj broj osoba po decenijama dalje korišćenjem deljenog objekta koji mora biti implementiran preko regiona ili semafora u zavisnosti od grupe. - Klasa
Combinerna osnovu prikupljenih brojeva nezavršenih serija po decenijama određuje ukupan broj nezavršenih serija po decenijama. 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
Printerna svakih M (zadaje se) sekundi štampa informacije o broju obrađenih filmova, sve dok se ne prikupe konačni podaci i na kraju štampa njih na osnovu podataka koje je dostavila klasaCombiner. Ova klasa obradu obavlja u svom toku kontrole. Izlaz aplikacije je lista koja za svaku deceniju ispisuje zanimanja osoba koje su se u njoj rodile i koliko je bilo osoba sa tim zanimanjem. - Klasa
Testtestira ovaj sistem. Klasa u svojoj početnojmainmetodi kreira sve potrebne deljene objekte, pokreće jednu instancu klaseProducer, veći (podesiv) broj instanci klaseConsumer, jednu instancu klaseCombineri 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!