Programowanie współbieżne i rozproszone/PWR Ćwiczenia 3
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 pierwsze
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
Rozwiązanie drugie. Serwer.
Częstym rozwiązaniem stosowanym w modelu rozproszonym jest wprowadzanie dodatkowych procesów, które nadzorują synchronizację pozostałych. Zastosujmy takie podejście do omawianego zadania. Wprowadźmy dodatkowy proces o nazwie Dozorca, który będzie nadzorował dostęp do sekcji krytycznej.
- Ćwiczenie (ukrywajka)
- Jakie komunikaty powinien