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.

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;

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

Saved successfully!

Ooh no, something went wrong!