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.

256 <strong>Programowanie</strong> wspóbiene. <strong>Systemy</strong> <strong>czasu</strong> <strong>rzeczywistego</strong><br />

begin<br />

Lczyt := Lczyt - 1;<br />

if Lczyt = 0 then<br />

signal(Pisanie);<br />

end if;<br />

end WychodziCzytelnik;<br />

procedure Pisze is<br />

begin<br />

if Lczyt > 0 or Lpisz > 0 then<br />

wait(Pisanie);<br />

end if;<br />

Lpisz := 1;<br />

-- pisze<br />

Lpisz := 0;<br />

if not empty(Czytanie) then signal(Czytanie);<br />

else signal(Pisanie);<br />

end if;<br />

end Pisze;<br />

end Czytelnia;<br />

task Czytelnik;<br />

task body Czytelnik is<br />

begin<br />

loop<br />

Czytelnia.WchodziCzytelnik;<br />

-- czyta<br />

Czytelnia.WychodziCzytelnik;<br />

-- sekcja lokalna<br />

end loop;<br />

end Czytelnik;<br />

task Pisarz;<br />

task body Pisarz is<br />

begin<br />

loop<br />

-- sekcja lokalna<br />

Czytelnia.Pisze;<br />

end loop;<br />

end Pisarz;<br />

W powyszym rozwizaniu dwie zmienne warunkowe pisanie i czytanie okrelaj stan<br />

czytelni — to, czy jest ona zajta przez czytelników, czy przez pisarza. Jeeli czytelnicy<br />

nie mog wej do czytelni, to s zawieszani w kolejce warunku czytanie (wykonuj<br />

instrukcj wait(czytanie)) i reaktywowani przez wychodzcego z czytelni pisarza instrukcj<br />

signal(czytanie). Analogicznie, jeeli czytelnicy przebywaj w czytelni, to pisarz<br />

jest zawieszany w kolejce warunku pisanie i wznawiany (signal(Pisanie)) przez<br />

ostatniego czytelnika wychodzcego z czytelni.<br />

8.3.4. Obiekty chronione<br />

Jeszcze bardziej naturalne i przede wszystkim efektywniejsze rozwizanie (ze wzgldu<br />

na liczb operacji synchronizujcych dostp do czytelni) zapewnia obiekt chroniony.<br />

package Czytelnicy_Pisarze is<br />

procedure Czytaj(I: out Typ);<br />

procedure Zapisz(I: Typ);

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

Saved successfully!

Ooh no, something went wrong!