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.

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

type Filozof is access Fil;<br />

Widelce: array(Liczba_Filozofow) of Kontrola_Widelcow;<br />

Filozofowie: array(Liczba_Filozofow) of Filozof;<br />

-- pierwsze rozwizanie<br />

task body Kontrola_Widelcow is<br />

begin<br />

loop<br />

accept Podnies;<br />

accept Odloz;<br />

end loop;<br />

end Kontrola_Widelcow;<br />

task body Brak_Blokady is<br />

Max: constant Integer := N - 1;<br />

L_Jedzacy: Integer range 0..Max := 0; -- liczba jedzcych filozofów<br />

begin<br />

loop<br />

select<br />

when L_Jedzacy < Max =><br />

accept Wchodzi do<br />

L_Jedzacy := L_Jedzacy + 1;<br />

end Wchodzi;<br />

or<br />

accept Opuszcza do<br />

L_Jedzacy := L_Jedzacy - 1;<br />

end Opuszcza;<br />

end select;<br />

end loop;<br />

end Brak_Blokady;<br />

task body Fil is<br />

Widelec1, Widelec2: Liczba_Filozofow;<br />

use Czynnosci;<br />

begin<br />

Widelec1 := P;<br />

Widelec2 := (Widelec1 + 1) mod N;<br />

loop<br />

Mysli;<br />

Brak_Blokady.Wchodzi;<br />

Widelce(Widelec1).Podnies;<br />

Widelce(Widelec2).Podnies;<br />

Je;<br />

Widelce(Widelec1).Odloz;<br />

Widelce(Widelec2).Odloz;<br />

Brak_Blokady.Opuszcza;<br />

end loop;<br />

end Fil;<br />

begin<br />

for P in Liczba_Filozofow loop<br />

Filozofowie(P) := new Fil(P);<br />

end loop;<br />

end Filozofow5;<br />

W tego typu rozwizaniach opartych na specyfikacji zada typu serwer awaria jednego<br />

z serwerów jest niedopuszczalna. Wykonanie zada klienta nie powinno mie natomiast<br />

wpywu na poprawno dziaania programu, lecz co najwyej na jego efektywno.<br />

Awaria jednego z zada filozofa w sekcji lokalnej (Mysli) nie ma wpywu na wykonanie<br />

pozostaych, jednak awaria jednego z zada w sekcji krytycznej powoduje zabloko-

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

Saved successfully!

Ooh no, something went wrong!