ОС1/Модификације август 2021
< ОС1
Пређи на навигацију
Пређи на претрагу
Следеће модификације су се појавиле на одбрани пројекта у августовском року 2021.
30 поена
- У класи Тхреад додати нестатичку методу
int allOlderSiblings()која враћа број незавршене старије браће тренутне нити. Уколико нит није насталаfork()-ом, метода враћа -1. - Нит А је старији брат нити Б ако су и нит А и нит Б настале форковањем исте нити али је А настала пре Б.
- Написати тест пример на следећи начин:
- Форком направити 5 деце а затим у сваком детету генерисати случајан број
num_iter(од 3 до 10) и у петљи која итерираnum_iterпута исписивати следећу поруку: "Thread id: x/num_iter allOlderSiblings: res" где јеidИД тренутне нити,xтренутна итерација петље,num_iterпретходно случајно генерисан број, аresповратна вредностallOlderSiblings()методе за текућу нит. - Такође додати семафор који у свакој итерацији детета успављује дете на рандом време од
50до250ms.
Решење
int userMain(int argc, char** argv) {
for(int i = 0; i < 5; i++) {
int pid = Thread::fork();
if(pid) continue;
Semaphore sleeper(0);
int num_iter = 3 + (rand() % 8);
for(int j = 0; j < num_iter; j++) {
intLock
cout << "Thread " << Thread::getRunningId() << ": " << j << "/" << num_iter << " allOlderSiblings = " << (Thread::getThreadById(Thread::getRunningId))->allOlderSiblings() << endl;
intUnlock
sleeper.wait(1 + (rand() % 5));
}
}
}