КДП/Лаб 1 2022
< КДП
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Прва лабораторијска вежба 2022. године носила је 10 бодова. Исти текст поновио се и на наредних неколико првих лабораторијских вежби. За разлику од лабораторијске вежбе за самосталну вежбу, није био дат скелет кода.
Група 1
Поставка
Потребно је написати Јава апликацију која проналази број још увек активних серија по деценијама. Решење мора бити максимално конкурентно и отпорно на прекиде.
Делови апликације:
- Класа
Producer
обрађује улазну датотеку са филмовима и информацију о сваком појединачном филму убацује у дељени објекат за даљу обраду. За имплементацију дељеног објекта користити Lock или семафоре у зависности од групе, али тако да поштују FIFO поредак. Ова класа обраду обавља у свом току контроле. Подаци о филмовима се читају ред по ред из архиве са филмовима (title.basics.tsv.gz). - Класа
Consumer
обрађује информације о добијеном филму и резултате обраде на крају прослеђује на даљу обраду. Ова класа обраду обавља у свом току контроле. Класа чита информације о неком филму из дељеног објекта. Чува се само број серија које су започеле (startYear
није\N
) а нису завршиле (endYear
је\N
) по деценијама. На сваких K (задаје се) обрађених филмова које једанConsumer
обради, ажурира информацију о свом броју обрађених филмова користећи посебан посебан дељени објекат. Када не буде било више филмова за обраду,Consumer
прослеђује свој број серија по деценијама даље коришћењем дељеног објекта који мора бити имплементиран преко монитора или региона у зависности од групе. - Класа
Combiner
на основу прикупљених бројева незавршених серија по деценијама одређује укупан број незавршених серија по деценијама. Ова класа обраду обавља у свом току контроле. Класа преузима податке из дељеног објекта и након завршене обраде резултат убацује у следећи дељени објекат. - Класа
Printer
на сваких M (задаје се) секунди штампа информације о броју обрађених филмова, све док се не прикупе коначни подаци и на крају штампа њих на основу података које је доставила класаCombiner
. Ова класа обраду обавља у свом току контроле. Излаз апликације је листа која садржи деценију и број незавршених серија у тој деценији. - Класа
Test
тестира овај систем. Класа у својој почетнојmain
методи креира све потребне дељене објекте, покреће једну инстанцу класеProducer
, већи (подесив) број инстанци класеConsumer
, једну инстанцу класеCombiner
и једну инстанцу класеPrinter
. Након комплетно завршене обраде, штампа колико је износило укупно време обраде за дати број нити које раде обраду. - Ниједна класа нити (
Producer
,Consumer
,Combiner
,Printer
) не сме да зна за број инстанци класе Consumer!
Решење
Група 2
Поставка
Потребно је написати Јава апликацију која проналази број живих особа које су се бавиле одређеном професијом по деценијама. Решење мора бити максимално конкурентно и отпорно на прекиде.
Делови апликације:
- Класа
Producer
обрађује улазну датотеку са особама и информацију о свакој појединачној особи убацује у дељени објекат за даљу обраду. За имплементацију дељеног објекта користити Lock или монитора у зависности од групе, али тако да поштују FIFO поредак. Ова класа обраду обавља у свом току контроле. Подаци о особама се читају ред по ред из архиве са особама (name.basics.tsv.gz). - Класа
Consumer
обрађује информације о добијеној особи и резултате обраде на крају прослеђује на даљу обраду. Ова класа обраду обавља у свом току контроле. Класа чита информације о особама из дељеног објекта. Чува се само број особа које су још увек живе (deathYear
је\N
) по занимањима и деценијама. На сваких K (задаје се) обрађених особа које једанConsumer
обради, ажурира информацију о свом броју обрађених особа користећи посебан посебан дељени објекат. Када не буде било више особа за обраду,Consumer
прослеђује свој број особа по деценијама даље коришћењем дељеног објекта који мора бити имплементиран преко региона или семафора у зависности од групе. - Класа
Combiner
на основу прикупљених бројева незавршених серија по деценијама одређује укупан број незавршених серија по деценијама. Ова класа обраду обавља у свом току контроле. Класа преузима податке из дељеног објекта и након завршене обраде резултат убацује у следећи дељени објекат. - Класа
Printer
на сваких M (задаје се) секунди штампа информације о броју обрађених филмова, све док се не прикупе коначни подаци и на крају штампа њих на основу података које је доставила класаCombiner
. Ова класа обраду обавља у свом току контроле. Излаз апликације је листа која за сваку деценију исписује занимања особа које су се у њој родиле и колико је било особа са тим занимањем. - Класа
Test
тестира овај систем. Класа у својој почетнојmain
методи креира све потребне дељене објекте, покреће једну инстанцу класеProducer
, већи (подесив) број инстанци класеConsumer
, једну инстанцу класеCombiner
и једну инстанцу класеPrinter
. Након комплетно завршене обраде, штампа колико је износило укупно време обраде за дати број нити које раде обраду. - Ниједна класа нити (
Producer
,Consumer
,Combiner
,Printer
) не сме да зна за број инстанци класе Consumer!