КДП/Лаб 1 надокнада 2022

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите 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!

Решење