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