Programowanie współbieżne i rozproszone/PWR Ćwiczenia 3
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Zadanie 1
Treść
Stosując mechanizm komunikacji asynchronicznej omówiony na wykładzie rozwiąż problem wzajemnego wykluczania dla wielu procesów. Co zmieni się w rozwiązaniu, jeśli zezwolimy na pobyt w sekcji krytycznej jednocześnie K>0 procesom?
Rozwiązanie
Przedstawione na wykładzie rozwiązanie działa dobrze także wtedy, gdy w systemie działa wiele procesów. Każdy z nich wykonuje kod:
process Pr (i: integer);
var
k: Komunikat;
begin
repeat
własne_sprawy;
GetMessage (b, k)
sekja_krytyczna;
SendMessage (b, k)
until false
end;
Przed uruchomieniem procesów (powiedzmy, że jest ich P) musimy jeszcze zadbać o to, by w buforze b było K komunikatów:
const
P = ...;
K = ...;
type
Komunikat = (Bilet);
var i: integer;
begin
for i := 1 to K do
SendMessage (b, Bilet);
cobegin
for i := 1 to P do Pr(i)
coend
end