Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- monitor mon {
- int num;
- int generated; /* 1 - mamy wygenerowana nowa liczbe; 0 - nie ma liczby */
- condition added; /* sprawdza, czy zostala juz zapisana jakas liczba */
- condition read; /* sprawdza, czy ta liczba zostala juz przeczytana */
- void add(int x) {
- if (generated == 1) {
- /* jesli mamy juz wygenerowana liczbe, to funkcja sobie czeka az ja obudzimy signalem */
- waitc(read);
- }
- num = x;
- generated = 1; /* zaznaczamy, ze mamy nowa liczbe */
- signalc(added); /* budzimy proces czytajacy liczbe */
- }
- int get() {
- if (generated == 0) {
- /* jesli wygenerowana liczba zostala juz przeczytana, to funkcja czeka az zostanie nowa wygenerowana i obudzimy ja signalem */
- waitc(added);
- }
- generated = 0; /* zaznaczamy, ze nie mamy juz 'nowej' liczby */
- signalc(read); /* budzimy producenta */
- return num;
- }
- init {
- /* warunki poczatkowe */
- num = 0;
- generated = 0;
- }
- }
- void producer() {
- int i = 0;
- for (i; i < 10; i++) {
- int num;
- num = random(100);
- add(num);
- }
- }
- void consumer() {
- int i = 0;
- for (i; i < 10; i++) {
- int num;
- num = get();
- cout << num << endl;
- }
- }
- main() {
- cobegin {
- producer(); consumer();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement