Advertisement
Guest User

lab11/zad3

a guest
Jan 18th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. monitor mon {
  2. int num;
  3. int generated; /* 1 - mamy wygenerowana nowa liczbe; 0 - nie ma liczby */
  4.  
  5. condition added; /* sprawdza, czy zostala juz zapisana jakas liczba */
  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. num = x;
  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. }
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement