КДП/Јул 2020
Поставка овог рока може се наћи са странице предмета.
1. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Користећи расподељене бинарне семафоре и технику предаје штафетне палице решити проблем читалаца и писаца (Readers - Writers Problem).
Решење
2. задатак
Поставка
Проблем изградње молекула воде (The H2O Problem). Написати монитор са signal and continue дисциплином за решавање овог проблема, под следећим условима. Атоми водоника, када желе да направе молекул воде, позивају мониторску процедуру hReady(), атоми кисеоника позивају мониторску процедуру oReady(). Последњи пристигли атом треба да позове мониторску процедуру makeWater(), након чијег завршетка сва три атома треба да заврше своје одговарајуће hReady() и oReady() процедуре. Не сме бити изгладњивања.
Решење
class TheH2OProblem {
private Condition hQueue = new Condition();
private Condition oQueue = new Condition();
private int hCount = 0;
private int oCount = 0;
private int hTicket = 1;
private int oTicket = 1;
public synchronized void hReady() {
++hCount;
if (hCount >= 2 && oCount >= 1) {
makeWater();
hCount -= 2;
oCount -= 1;
hQueue.signal();
oQueue.signal();
} else {
hQueue.wait(hTicket++);
}
}
public synchronized void oReady() {
++oCount;
if (hCount >= 2 && oCount >= 1) {
makeWater();
hCount -= 2;
oCount -= 1;
hQueue.signal();
hQueue.signal();
} else {
oQueue.wait(oTicket++);
}
}
private void makeWater() {
// ...
}
}
3. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Користећи активне мониторе решити проблем филозофа који ручавају (The Dining Philosophers). Филозофи могу да комуницирају искључиво са процесом координатором (централизовано решење). Обезбедити да филозоф који је пре затражио да једе пре и започиње са јелом. Написати код за филозофе и за процес координатор
Решење
4. задатак
- Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.
Поставка
Посматра се семафор за регулацију саобраћаја на улици са једним пешачким прелазом. Када пешак стигне до пешачког прелаза, уколико је светло за пешаке зелено, он прелази улицу. Уколико је у моменту његовог доласка светло за пешаке црвено, он чека да се укључи зелено светло. Зелено светло за пешаке се укључује или након К секунди од појаве првог пешака који је затекао црвено светло, или након проласка C аутомобила од последњег активног зеленог светла за пешаке. Зелено светло за пешаке трајања G секунди се пали само уколико је испуњен неки од наведених услова и барем један пешак чека. Потребно је у језику CSP написати процесе пешака, аутомобила и семафора, уколико је познато да у систему постоји N аутомобила и T пешака. Доступна је функција system_current_time која враћа тренутно време система.