12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SPROC może usiiwać element ze zbioru zbiórS dopiero po otrzymaniu odpowiedzi od procesuTPROC.comment S - liczba elementów zbioru zbiórS,T - liczba elementów zbioru zbiórT;[SPROC:: zbiórS: (1..S) integer;m, n: integer;dalej: boolean;dalej := true;*[dalej -> m := max_elem(zbiórS);TPROC!m;TPROC?n;[m = n -> dalej := false;[] m n -> zbiórS := zbiórS - {m} + {n}]]IITPROC:: zbiórT: (1..t) integer; m: integer;*[SPROC?m -> zbiórT := zbiórT + {m};m := min_elem(zbiórT);zbiórT := zbiórT - {m};SPROCIm]]5.4.4 Obliczanie histogramuW tym rozwiązaniu warto zwrócić uwagę na sposób przesyłania wartości progowych zprocesu SEG(O) do procesów SEG(k), k = 1,... ,N, wynikający z faktu, że nie można użyćzmiennej jako indeksu procesu. Wynikowa tablica h jest w procesie SEG(O) zadeklarowanabezpośrednio przed jej użyciem. Po zakończeniu się procesu WEJŚCIE dozór drugiej pętli wprocesie SEG(O) staje się fałszywy i proces ten wysyła sygnał KONIEC(). Sygnał ten jestprzekazywany kolejno przez wszystkie procesy SEG(k:l. ,N), a proces SEG(N) przekazuje goprocesowi STAT. W chwili odebrania tego sygnału proces STAT wie na pewno, że odebrał jużwszystkie wysiane do niego sygnały LICZ.W procesie STAT zastosowano charakterystyczny sposób zerowania tablicy h. Pętlawykona się dokładnie tyle razy, ile elementów niezerowych było inicjalnie w tablicy. Jeśliwszystkie deklarowane w procesie zmienne są automatycznie ustawione na wartości zerowe,to pętla nie wykona się ani razu.Oczywiście i tak wymaga to sprawdzenia wszystkich N dozorów pętli, ale CSP jestjęzykiem zakładającym najwyższy możliwy stopień współbieżności.Zmienna dalej w procesach SEG i STAT służy do zatrzymania pętli w razie otrzymaniasygnału końca KONIEC().comment N - liczba wartości progowych;[SEG(O):: i: integer; x: real; a: (1..N) real;i := 1; *[(k:l..N) k = i -> SEG(k)!a(k); i := i + 1];*[WEJŚCIE?x -> SEG(l)!x];SEG(1)!KONIEC();h: (l..N) integer;i := 1; *[i STAT?h(i); i := i + 1];||SEG(k:l..N):: a,x:real; dalej: boolean;*[SEG(0)?a ->137

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

Saved successfully!

Ooh no, something went wrong!