SHOW:
|
|
- or go back to the newest paste.
1 | - | sem sTabM[m] = -1; |
1 | + | |
2 | - | sem sGotowe = -m; |
2 | + | |
3 | - | sem sTabN = -n; |
3 | + | |
4 | ||
5 | //ilosc proc | |
6 | int n; | |
7 | - | int tabM[m]; |
7 | + | |
8 | void proces_P(intid_procesu) | |
9 | - | //ilosc proc wyznacz_min |
9 | + | |
10 | int x = generuj_int(); | |
11 | int minimum = MONITOR.znajdz_min(x, id_procesu); | |
12 | - | //tablica lokalnych wynikow kazdego z proc |
12 | + | printf(”minimum = %d\n”, minimum); |
13 | - | int tabN[n]; |
13 | + | |
14 | ||
15 | - | void WYDRUK(void) |
15 | + | monitor MONITOR { |
16 | private: | |
17 | - | P(sGotowe); |
17 | + | int num = 0; |
18 | - | printf("min = %d\n", min); |
18 | + | int min; |
19 | cond allDone; | |
20 | public: | |
21 | - | void WYZNACZ_MIN(int i) |
21 | + | int znajdz_min(x, idp){ |
22 | if (num = 0) { | |
23 | - | int localMin; |
23 | + | min = x; |
24 | - | int localElements = m / n; |
24 | + | } |
25 | - | for ( int k = localElements * i; k < localElements * (i + 1); k++) { |
25 | + | else { |
26 | - | P(tabM[k]); |
26 | + | if (x < min) { |
27 | - | if (tabM[k] < localMin) { |
27 | + | min = x; |
28 | - | localMin = k; |
28 | + | } |
29 | } | |
30 | - | } |
30 | + | if (num < n - 1){ |
31 | - | tabN[i] = localMin; |
31 | + | num++; |
32 | - | V(sTabN); |
32 | + | wait(allDone); |
33 | } | |
34 | - | // znajdowanie min tabN - 1 raz wykonane przez 1 najszybszy proces |
34 | + | signal(allDone); |
35 | - | P(sTabN); |
35 | + | return min; |
36 | - | for (int i = 0; i < n; i++) { |
36 | + | |
37 | - | if (tabN[i] < min) { |
37 | + |