12.11.2014 Views

PRV Zadaci - Programiranje u Realnom Vremenu

PRV Zadaci - Programiranje u Realnom Vremenu

PRV Zadaci - Programiranje u Realnom Vremenu

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Konkurentno programiranje<br />

1. Zaštideni objekti na jeziku Ada<br />

Potrebno je projektovati sistem za kontrolu saobraćaja u nekom jednosmernom tunelu. U cilju<br />

bezbednosti, u tunelu se ne sme nalaziti više od približno N vozila u datom trenutku. Semafor na ulazu<br />

u tunel kontroliše priliv vozila, dok detektori vozila na ulazu i izlazu iz tunela prate tok vozila. Potrebno<br />

je napisati dva procesa i monitor kojima se kontroliše tok saobraćaja u tunelu. Prvi proces nadzire<br />

ulazni, a drugi izlazni detektor saobraćaja. Monitor kontroliše semafor na ulazu u tunel. Pretpostavlja se<br />

da su realizovane sledeće globalne funkcije:<br />

int carsExited (); // Vraća broj vozila koja su napustila tunel<br />

// od trenutka poslednjeg poziva ove funkcije<br />

int carsEntered (); // Vraća broj vozila koja su ušla u tunel<br />

// od trenutka poslednjeg poziva ove funkcije<br />

void setLights (Color); // Postavlja svetlo semafora na zadatu boju:<br />

// enum Color {Red, Green};<br />

void delay10Seconds (); // Blokira pozivajući proces na 10 sekundi<br />

Program treba da očitava senzore (preko funkcija carsExited() i carsEntered()) svakih 10 sekundi,<br />

sve dok tunel ne postane prazan ili pun. Kada tunel postane pun (i na semaforu se upali crveno svetlo),<br />

proces koji nadgleda ulaz u tunel ne treba više kontinualno da poziva funkciju carsEntered(). Slično,<br />

kada tunel postane prazan, proces koji nadgleda izlaz iz tunela ne treba više kontinualno da poziva<br />

funkciju carsExited(). Prikazati rešenje korišćenjem zaštićenih objekata u jeziku Ada.<br />

Rešenje:<br />

N : constant Integer := ...;<br />

protected type Tunel is<br />

entry carsIn();<br />

entry carsOut();<br />

private<br />

current : Integer := 0;<br />

end Tunel;<br />

protected body Tunel is<br />

entry carsIn when current < N is<br />

begin<br />

current := current + carsEntered();<br />

if current >= N then<br />

setLights(Red);<br />

end if<br />

end carsIn<br />

38

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!