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.

natomiast po otrzymaniu od procesu P sygnału CHCĘO — niedeterministyczny wybórkomunikatu skierowanego do tego procesu.POŚREDNIK::ile: (1..N) integer;kom: (1..M) komunikat; k: komunikat;adr: (1..M) integer; i, n: integer;i := 1; *[i ile(i) := 0; i := i + 1] ;i := 1; *[i losuj(adr(i));ile(adr(i)) := ile(adr(i)) + 1;kom(i) := generuj.komunikat;i := i + l];*[(j: 1..N) P(j)?(k,n) ->[(i: 1..M) adr(i) = O ->(adr(i), kom(i), ile(n)) := (n, k, ile(n)-H)][](j: 1..N) ile(j) > 0; P(j)?CHCĘ() ->[(i: 1..M) adr(i) = j -> P(j)!kom(i);(adr(i), ile(j)) := (O, ile(j)-l)]]5.4.8 Centrala telefonicznaProces CENTRALA musi pamiętać stan swoich łączy. Zmienna wolne wskazuje, ilełączy jest w danej chwili wolnych. W tablicy kanał jest pamiętane, który z procesówODBIORCA korzysta aktualnie z danego łącza. W tablicy odbiór pamięta się, czy danyODBIORCA jest aktualnie zajęty inną rozmową. Centrala zwraca procesowi NADAWCAwartość O, jeśli nie ma wolnego łącza (wolne = 0) lub jeśli ODBIORCA, z którym chce siępołączyć nadawca, jest zajęty (odbiór(m) = true). Jeśli połączenie jest możliwe, procesCENTRALA zmniejsza wartość zmiennej wolne i wyszukuje numer wolnego łączaprzeglądając tablicę kanał. Następnie informuje odpowiedni proces ODBIORCA wysyłając doniego numer łącza, przez które ma odebrać rozmowę (telefon dzwoni u odbiorcy). Ponieważw CSP nie można użyć zmiennej jako indeksu procesu, zastosowano tu instrukcję alternatywyz tablicą dozorów. Proces NADAWCA informuje proces CENTRALA o zakończeniu nadawaniawysyłając komunikat ZWALNIAM(k), przy czym k jest numerem przyznanego łącza (oznaczato odłożenie słuchawki). W tym rozwiązaniu tylko proces NADAWCA może zwolnić linię.Odpowiada to rzeczywistemu zachowaniu się central telefonicznych.comment N - liczba nadawców,M - liczba odbiorców,K - liczba łączy;[NADAWCA(i:l..N):: m, k: integer;*[true -> losuj(m);k := 0;*[k = O -> CENTRALAIm; CENTRALA?k];nadaj(k);CENTRALA!ZWALNIAM(k);]||ODBIORCA(i:l..M):: k: integer;*[CENTRALA?k -> odbierz(k)]MCENTRALA:: m, i, wolne: integer;kanał: (1..K) integer;odbiór: (1..M) boolean;*[(!:!..K) kanał(i) O -> kanał(i) := 0];141

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

Saved successfully!

Ooh no, something went wrong!