15.04.2014 Views

Programowanie współbieżne. Systemy czasu rzeczywistego - Helion

Programowanie współbieżne. Systemy czasu rzeczywistego - Helion

Programowanie współbieżne. Systemy czasu rzeczywistego - Helion

SHOW MORE
SHOW LESS

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.

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

Saved successfully!

Ooh no, something went wrong!