Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,33 +1,42 @@
/** Семинарска по Оперативни Системи на Николина Симоноска со индекс 909/2010 **/
Ве најмуваат од државната градинка „Весела Пролет“, да имплементирате софтвер кој автоматски ќе гo контролира присуството на воспитувачките во однос на децата во градинката и ќе го направи распределување на воспитувачи-деца. Во градинката има правило дека секогаш мора има еден присутен воспитувач за најмногу три деца.

Ве најмуваат од државната градинка „Весела Пролет“, да имплементирате софтвер кој автоматски ќе гo контролира присуството на воспитувачките во однос на децата во градинката и ќе направи распределување на воспитувачи-деца.
Во градинката има правило дека секогаш мора има еден присутен воспитувач за најмногу три деца.
Во почетниот код кој е даден, дефинирани се класите Adult и Child, кои ги симболизираат воспитувачките и децата од градинката.

Во имплементацијата, можете да ги користите следните методи од веќе дефинираната променлива state:

state.adultEntered()
- Го симболизира влегувањето на воспитувач во градинката.

state.adultLeft()
- Го симболизира излегувањето на воспитувач од градинката.
Потребно е да се напише решение за синхронизација кое ќе ги задоволи следниве услови:

state.adultLeaving()
- Симболизира состојба на чекање на воспитувачот за да излезе од градинката.
o Воспитувачот може да влезе во градинката било кога, но за да излезе од градинката мора да има доволен број на воспитувачи за да ги чуваат децата(најмногу три за секој воспитувач).
o Доколку двајца возрасни сакаат да заминат во исто време, можат да пробаат да си ги поделат децата и да настане блокада.
o Детето може да влезе во градинката доколку има доволен број на воспитувачи за децата кои се внатре и детето кое сака да влезе.
o Кога ќе си замине некое дете, ако има воспитувачи што чекаат да излезат и притоа има доволен број на воспитувачи во градинката, треба да му се дозволи на воспитувачот да излезе.

state.childrenEntered()
- Го симболизира влегувањето на дете во градинката.

state.childLeft()
- Го симболизира излегувањето на дете од градинката.

state.childEntering()
- Симболизира состојба на чекање на дете за да влезе од градинката.
Во почетниот код кој е даден, дефинирани се класите Adult и Child, кои ги симболизираат воспитувачките и децата од градинката.
Во имплементацијата, можете да ги користите следните методи од веќе дефинираната променлива state:
• state.adultEntered()
o Го симболизира влегувањето на воспитувач во градинката.
• state.adultLeft()
o Го симболизира излегувањето на воспитувач од градинката.
• state.adultLeaving()
o Симболизира состојба на чекање на воспитувачот за да излезе од градинката.
• state.childrenEntered()
o Го симболизира влегувањето на дете во градинката.
• state.childLeft()
o Го симболизира излегувањето на дете од градинката.
• state.childEntering()
o Симболизира состојба на чекање на дете за да влезе во градинката.

Исто така можете да ги користите следниве бројачи дефинирани во state:
• state.adults
o Го симболизира тековниот број на воспитувачи во градинката.
• state.adultLeaving
o Го симболизира бројот на воспитувачи кои чекаат за да излезат од градинката.
• state.children
o Го симболизира тековниот број на деца во градинката
• state.childEntering
o Го симболизира бројот на деца кои чекаат за да влезат во градинката.

Се користат семафори и бројачи по желба. Тие треба да се дефинираат на почетокот од класата и треба да се static. Се иницијализираат во методот init().
Вашата задача е да ги имплементирате методите Child.execute(), Adult.execute() и init(). При имплементацијата, не смеете да додадете try-catch блок во нив. Потребните семафори, глобални променливи и променливи за состојбата треба да ги дефинирате самите.
Доколку имате грешка, ќе ја добиете пораката:
Procesot ne e sinhroniziran spored uslovite na zadacata.

По што ќе ви се прикаже логот на повикување на акциите и настанатите грешки. Овој лог треба да ви послужи за увидување на тоа каде имате грешка во извршувањето на вашата задача.
Напомена: Поради конкурентниот пристап за логирањето, можно е некои од пораките да не се на позицијата каде што треба да се. Токму затоа, овие пораки користете ги само како информација, но не се ослонувајте на нив.