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.
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);