Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
242 <strong>Programowanie</strong> wspóbiene. <strong>Systemy</strong> <strong>czasu</strong> <strong>rzeczywistego</strong><br />
begin<br />
loop<br />
s.wait;<br />
if Wolne(I) < 2 then czekaj(I); end if;<br />
Wolne((I + 4) mod 5) := Wolne((I + 4) mod 5) - l;<br />
Wolne((I + 1) mod 5) := Wolne((I + 1) mod 5) - l;<br />
s.signal;<br />
end loop;<br />
end BioreWidelce;<br />
........<br />
-- analogiczna procedura OddajeWidelce<br />
procedure Czekaj(I: Integer) is<br />
begin<br />
licznik(I) := licznik(I) + 1;<br />
s.signal;<br />
jedzenie(I).wait;<br />
licznik(I) := licznik(I) - 1;<br />
end Czekaj;<br />
procedure Sygnalizuj(I: Integer) is<br />
begin<br />
if licznik(I) > 0 then<br />
jedzenie(I).signal;<br />
else<br />
s.signal;<br />
end if;<br />
end Sygnalizuj;<br />
Semafor s zapewnia wzajemne wykluczanie w dostpie do tablicy Wolne. Na pocztku<br />
procedury BioreWidelce i-ty filozof, opuszczajc semafor s, blokuje moliwo<br />
sprawdzenia przez pozostae zadania dostpnoci widelców (analogicznie jak w monitorze).<br />
Jeeli widelce nie s dostpne, wywouje procedur Czekaj(I), w której jest zawieszany<br />
na operacji opuszczania semafora jedzenie(I). Z kolei j-ty filozof, odkadajc<br />
swoje widelce, sprawdza dostpno widelców swoich ssiadów i ewentualnie podnosi<br />
semafory jedzenie((J + 1) mod 5) i/lub jedzenie((J - 1) mod 5) — w przypadku<br />
gdy s dostpne oba widelce oraz gdy s na tych semaforach zawieszone zadania filozofów.<br />
Liczb zawieszonych zada na semaforze jedzenie(I) okrela zmienna licznik(I).<br />
atwo zauway, e operacja Czekaj(I) i Sygnalizuj(I) s podobne do operacji<br />
wznawiania signal i wstrzymywania wait zada zawieszonych w kolejkach zmiennych<br />
warunkowych.<br />
To do skomplikowane rozwizanie jest efektywne, poniewa nie ma aktywnego<br />
oczekiwania (poprzez wielokrotne podnoszenie i opuszczanie semafora) na spenienie warunku<br />
dostpu do dwóch widelców. W porównaniu do rozwizania opartego na mechanizmie<br />
monitora, w którym bya zdefiniowana tylko jedna lokalna tablica warunków<br />
(wewntrz monitora), w powyszym rozwizaniu musimy zdefiniowa dwie globalne<br />
tablice liczników dla kadego oczekujcego filozofa oraz tablic semaforów.<br />
8.2.3. Obiekty chronione<br />
Rozwizanie problemu piciu filozofów oparte na mechanizmie obiektu chronionego jest<br />
zdecydowanie trudniejsze ni w przypadku monitora, w szczególnoci gdy rozwizanie<br />
ma zapewnia negacj warunku czciowego przydziau zasobów oraz hermetyzacj