View difference between Paste ID: z0U3BnQr and 5CXd0MTC
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
}