КДП/Лаб 1 надокнада 2022
< КДП
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Надокнада прве лабораторијске вежбе 2022. године одржана је 22. јуна. Испод се налази поставка задатка за групу Н-А, док су се у групи Н-Б као синхронизационе примитиве користили региони и катанци.
Поставка
Потребно је написати Јава апликацију која проналази све оне филмови који имају исти број режисера као и филм који има максималан број режисера. Решење мора бити максимално конкурентно и отпорно на прекиде. Дозвољено је додавати нове редове у дати костур апликације и додавати аргументе конструкторима, али није дозвољено брисати постојеће редове.
Делови апликације:
- Класа
Producer
обрађује улазну датотеку са филмовима и информације о сваком појединачном филму убацује у дељени објекат за даљу обраду. Ова класа обраду обавља у свом току контроле. Подаци о филмовима се читају ред по ред из архиве са филмским режисерима и сценаристима (title.crew.tsv.gz). Дељени објекат који се овде користи мора користити мониторе за синхронизацију, који морају бити ФИФО. - Класа
Consumer
обрађује филмове из дељеног објекта и резултате обраде на крају прослеђује на даљу обраду. Оба класа обраду обавља у свом току контроле. Класа чита информације о неком филму из дељеног објекта и тражи локални максимум броја режисера. Локално чува информације о свим својим обрађеним филмовима. Када више не буде било филмова за даљу обраду, информације о филмовима са локалним максимумом броја режисера прослеђује даље само уколико је пронађени локални максимум једнак глобалном максимуму режисера, користећи следећи дељени објекат. Дозвољено је користити још један дељени објекат за ову синхронизацију, уколико је потребно, и у том случају треба да користи семафоре за синхронизацију. Додатно,Consumer
на сваких N (задаје се) обрађених филмова, као и на крају, шаље информацију о броју обрађених филмова користећи посебан дељени објекат. - Класа
Combiner
прикупља филмове са максималним бројем режисера. Ова класа обраду обавља у свом току контроле. Класа преузима податке из дељеног објекта и након завршене обраде резултат убацује у следећи дељени објекат. - Класа
Printer
периодично (задаје се) штампа информације о броју филмова које су обрадиле све инстанце класеConsumer
, све док се не прикупе коначни подаци, и на крају штампа њих штампа[sic] на основу података које је доставила класаCombiner
. Ова класа обраду обавља у свом току контроле. Излаз апликације је листа која садржи информације о филмовима са истим бројем режисера као и филм са максималним бројем режисера. - Класа
Main
тестира овај систем. Класа у својој почетној main функцији креира све потребне дељене објекте, покреће једну инстанцу класеProducer
, већи (подесив) број инстанци класеConsumer
, једну инстанцу класеCombiner
и једну инстанцу класеPrinter
. Након комплетно завршене обраде, штампа колико је износило укупно време обраде за дати број нити које раде обраду. - Ниједна класа нити (
Producer
,Consumer
,Combiner
,Printer
) не сме да зна за број инстанци класе Consumer!