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.
244 <strong>Programowanie</strong> wspóbiene. <strong>Systemy</strong> <strong>czasu</strong> <strong>rzeczywistego</strong><br />
........<br />
I: Integer := 0;<br />
protected S is<br />
entry Czekaj;<br />
procedure Sygnalizuj;<br />
private<br />
Dostepna: Boolean := True;<br />
end S;<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 />
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 />
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 />
procedure glowna is<br />
type Tablica is array(Integer range ) of Integer;<br />
I: Integer := 0;<br />
protected S is<br />
entry Czekaj;<br />
procedure Sygnalizuj;<br />
private<br />
Dostepna: Boolean := True;<br />
end S;