SHOW:
|
|
- or go back to the newest paste.
1 | monitor mon { | |
2 | int num; | |
3 | - | int generated; |
3 | + | int generated; /* 1 - mamy wygenerowana nowa liczbe; 0 - nie ma liczby */ |
4 | ||
5 | - | condition added; |
5 | + | condition added; /* sprawdza, czy zostala juz zapisana jakas liczba */ |
6 | - | condition read; |
6 | + | condition read; /* sprawdza, czy ta liczba zostala juz przeczytana */ |
7 | ||
8 | void add(int x) { | |
9 | if (generated == 1) { | |
10 | /* jesli mamy juz wygenerowana liczbe, to funkcja sobie czeka az ja obudzimy signalem */ | |
11 | waitc(read); | |
12 | } | |
13 | - | generated = 1; |
13 | + | |
14 | - | signalc(added); |
14 | + | generated = 1; /* zaznaczamy, ze mamy nowa liczbe */ |
15 | signalc(added); /* budzimy proces czytajacy liczbe */ | |
16 | } | |
17 | ||
18 | int get() { | |
19 | if (generated == 0) { | |
20 | /* jesli wygenerowana liczba zostala juz przeczytana, to funkcja czeka az zostanie nowa wygenerowana i obudzimy ja signalem */ | |
21 | waitc(added); | |
22 | - | signalc(read); |
22 | + | |
23 | generated = 0; /* zaznaczamy, ze nie mamy juz 'nowej' liczby */ | |
24 | signalc(read); /* budzimy producenta */ | |
25 | ||
26 | return num; | |
27 | } | |
28 | ||
29 | init { | |
30 | /* warunki poczatkowe */ | |
31 | num = 0; | |
32 | generated = 0; | |
33 | } | |
34 | } | |
35 | ||
36 | ||
37 | void producer() { | |
38 | int i = 0; | |
39 | for (i; i < 10; i++) { | |
40 | int num; | |
41 | num = random(100); | |
42 | add(num); | |
43 | } | |
44 | } | |
45 | ||
46 | void consumer() { | |
47 | int i = 0; | |
48 | for (i; i < 10; i++) { | |
49 | int num; | |
50 | num = get(); | |
51 | cout << num << endl; | |
52 | } | |
53 | } | |
54 | ||
55 | ||
56 | main() { | |
57 | cobegin { | |
58 | producer(); consumer(); | |
59 | } | |
60 | } |