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.
Rozdzia 8. Problemy programowania wspóbienego 245<br />
protected body S is<br />
entry Czekaj when Dostepna is<br />
begin<br />
Dostepna := False;<br />
end Czekaj;<br />
procedure Sygnalizuj is<br />
begin<br />
Dostepna := True;<br />
end Sygnalizuj;<br />
end S;<br />
protected Jadalnia is<br />
entry BioreWidelce (j: in Integer);<br />
-- ........<br />
private<br />
Wolne: Tablica(0..4) := (others => 2);<br />
end Jadalnia;<br />
protected body Jadalnia is<br />
entry BioreWidelce(j: in Integer) when Wolne(I) = 2 is<br />
-- zmienna globalna I<br />
begin<br />
Wolne((j + 4) mod 5) := Wolne((j + 4) mod 5) - 1;<br />
Wolne((j + 1) mod 5) := Wolne((j + 1) mod 5) - 1;<br />
S.Sygnalizuj; -- zwalnia dostp do zmiennej I<br />
end BioreWidelce;<br />
--..........<br />
end Jadalnia;<br />
task type Filozof(Nr: Integer);<br />
task body Filozof is<br />
begin<br />
loop<br />
--Filozof_myli;<br />
S.Czekaj; -- blokuje dostp do zmiennej I<br />
I := Nr;<br />
Jadalnia.BioreWidelce(I);<br />
--Filozof_je;<br />
--Jadalnia.OddajeWidelce(I);<br />
end loop;<br />
end Filozof;<br />
begin<br />
null;<br />
end glowna;<br />
Powysze rozwizanie gwarantuje bezpieczestwo programu, jednak nie mona go<br />
uzna za poprawne, poniewa zawieszone zadanie na wejciu BioreWidelce bdzie blokowao<br />
dostp do zmiennej I dla innych zada. Oznacza to, e moe wystpi przeplot,<br />
w którym jeden filozof je, drugi oczekuje na wejcie do jadalni (atwo zauway,<br />
e jest to ssiad filozofa obecnie jedzcego), a pozostali nie mog konkurowa o dostp<br />
do obiektu chronionego Jadalnia (pomimo e dwa z trzech widelców w jadalni s wolne),<br />
poniewa s zawieszeni na operacji S.Czekaj. W tym wypadku nie jest spenione nastpujce<br />
wymaganie: jeeli s wolne dwa odpowiednie widelce, to przy braku wspózawodnictwa<br />
filozof powinien mie moliwo natychmiastowego ich pobrania.