ОС1/Модификације август 2023
Следеће модификације су се појавиле на одбрани пројекта у августу 2023.
Модификација за 20 бодова
- Имплементирати системски позив
int getThreadId()
који дохвата јединствени идентификатор нити која се тренутно извршава.getThreadId()
такође треба да обави промену контекста. (за овај део погледати модификацију из јула 2022.)
Потребно је проширити услуге класе Тхреад тако да задовољава следеће услове
- Додати статичку методу
SetMaximumThreads(int num_of_threads)
коју корисник позива на почетку програма. Ова метода поставља ограничење на максималан број корисничких нити. Уколико корисник ништа не унесе, подразумевана вредност је 5.
Након постављања максималног броја нити, могуце је креирати дати број нити, након тога све новокреиране нити се блокирају. Када једна од креираних корисничких нити заврши своје извршавање она одблокира једну од претходно блокираних нити у редоследу којем су блокиране.
Тест
Потребно је ставити максималан број нити на 3 и креирати 20 нити. Свака нит треба да испише Hello! Thread::myId
циклично 5 пута. Наког тога треба да симулира спавање семафором или бусy wаит-ом који је у линеарној корелацији са ИД-ом дате нити.
Модификација за 30 бодова
Додати статичку методу SetMaximumThreads(int num_of_threads, int max_time, int interval_time)
коју корисник позива на почетку програма. Ова метода поставља ограничење на максималан број корисничких нити.
Након позивања методе SetMaximumThreads(int num_of_threads, int max_time, int interval_time)
могуће је креирати слободно креирати нум_оф_тхреадс нити. Након тога наредне нити се блокирају. Када нит заврши своје извршавање она престаје са радом (ове нити не треба да деблокирају претходно блокиране нити). Након истека маx_тиме времена потребно је исписати Wаитинг доне: , и затим одблокирати нити једну за другом онако како суу блокиране притом да се измедју 2 деблокирања чека интервал_тиме времена. После сваког деблокирања нити треба исписати Интервал тиме елапсед .
Тест
Потребно је позвати SetMaximumThreads(3, 20, 10)
и креирати 20 нити. Свака нит треба да испише своје име + ИД. Након тога треба нит да позове thread_sleep(10)
. Ово се понавља док све нити не заврше.