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