Programowanie współbieżne i rozproszone/PWR Ćwiczenia 3: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 3: | Linia 3: | ||
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? | 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 === | === 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: | 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); | '''process''' Pr (i: integer); | ||
Linia 31: | Linia 31: | ||
'''coend''' | '''coend''' | ||
'''end''' | '''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 <tt>Dozorca</tt>, który będzie nadzorował dostęp do sekcji krytycznej. | |||
; Ćwiczenie (ukrywajka) | |||
: Jakie komunikaty powinien |
Wersja z 12:24, 12 cze 2006
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