ОС1/Модификације август 2023 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (K0v4c преместио је страницу OS1/Modifikacije avgust 2023 на ОС1/Модификације август 2023)
(нема разлике)

Верзија на датум 6. септембар 2023. у 22:16

Sledeće modifikacije su se pojavile na odbrani projekta u avgustu 2023.

Modifikacija za 20 bodova

Potrebno je prosiriti usluge klase Thread tako da zadovoljava sledece uslove

Dodati staticku metodu SetMaximumThreads(int num_of_threads) koju korisnik poziva na pocetku programa. Ova metoda postavlja ogranicenje na maksimalan broj korisnicnckih niti.

Nakon postavljanja maksimalnog broja niti, slobodno je moguce kreirati dati broj niti, nakon toga sve novokreirane niti se blokiraju. Kada jedna od kreiranih korisnickih niti zavrsi svoje izvrsavanje ona odblokira jednu od prethodno blokiranih niti u redosledu kojem su blokirane.

Test

Potrebno je staviti maksimalan broj niti na 3 i kreirati 20 niti. Svaka nit treba da ispise svoje ime + ID niti cilicno 5 puta. Nakog toga treba da simulira spavanje semaforom ili busy wait-om koji je u linearnoj korelacijai sa ID-om date niti.

Modifikacija za 30 bodova

Dodati staticku metodu SetMaximumThreads(int num_of_threads, int max_time, int interval_time) koju korisnik poziva na pocetku programa. Ova metoda postavlja ogranicenje na maksimalan broj korisnicnckih niti.

Nakon pozivanja metode SetMaximumThreads(int num_of_threads, int max_time, int interval_time) moguce je kreirati slobodno kreirati num_of_threads niti. Nakon toga naredne niti se blokiraju. Kada nit zavrsi svoje izvrsavanje ona prestaje sa radom (ove niti ne treba da deblokiraju prethodno blokirane niti). Nakon isteka max_time vremena potrebno je ispisati Waiting done: , i zatim odblokirati niti jednu za drugom onako kako se blokirane pritom da se izmedju 2 deblokiranja ceka interval_time vremena. Posle svakog deblokiranja niti treba ispisati Interval time elapsed .

Test

Potrebno je pozvati SetMaximumThreads(3 20, 10) i kreirati 20 niti. Svaka nit treba da ispise svoje ime + ID. Nakon toga treba nit da pozove thread_sleep(10). Ovo se ponavlja dok sve niti ne zavrse.