12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6.4.6 Algorytm Ricarta i AgrawaliPrezentowane rozwiązanie jest modyfikacją rozwiązania przedstawionego w książce[Ma0087]. Różnica polega na zastosowano zagnieżdżonych instrukcji accept. Proces, którychce wejść do sekcji krytycznej, jest w trakcie spotkania ze swoim procesem POMOCNIK takdługo, aż ten nie odbierze potwierdzeń od wszystkich pozostałych pomocników. W tym czasiePOMOCNIK może także odbierać od procesu SIEĆ żądania wejścia do sekcji krytycznejinnych procesów. Odpowiada na nie w zależności od czasu i numeru nadawcy tych żądań.Żądania te odbiera także poza instrukcją accept CHCĘ, ale wówczas zawsze odpowiada nanie natychmiast (proces P nie chce wówczas wejść do swojej sekcji krytycznej). Zauważmyrównież, że odpowiedzi z sieci mogą przychodzić tylko wtedy, gdy proces jest w trakciewykonywania instrukcji accept CHCĘ, zwolnienie natomiast jest możliwe tylko poza tąinstrukcją. (Uwaga: relację „różne" w Adzie zapisuje się znakiem /=.) N: constant Integer := ?;— liczba procesówtask P(1..N) isend;task body P isbeginloopwlasne_sprawy(P'index);POMOCNIK(P'index).CHCĘ;sekcja_krytyczna(P'index);POMOCNIK(P'index).ZWALNIAM;end loop;end P;task POMOCNIK(1..N) isentry CHCĘ;entry ZWALNIAM;entry'ODBIERZ_ZADANIE(czas: in Integer;odkogo: in Integer);entry ODBIERZ_ODPOWIEDZ;end;task body POMOCNIK ismojt: Integer := 0;— lokalny logiczny czas;t: Integer := 0; — największy czaslicz: Integer := 0;— liczba odpowiedziwstrzymany: array(l..N) of Boolean := (others => False);— kt6re procesy— wstrzymał ten procesbeginloopselectaccept CHCĘ domojt := t + 1;licz := 0;for j in l..N loop— wysłanie żądań do— pozostałych procesówif j /= POMOCNIK'index thenSIEĆ.ŻĄDANIE(mójt.j);end if;end loop;loopselectaccept ODBIERZ_ZADANIE(czas:in Integer;177

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!