BACI System: C-- to PCODE Compiler in C, 11:30   1 Oct 2012
Source file: zad1.cm  Wed Dec  5 14:22:03 2018
 line  pc
   1    0  semaphore s2;
   2    0  semaphore s;
   3    0  semaphore t;
   4    0  const int N = 5;
   5    0  int buffer[N];
   6    0  int write_pos = 0;
   7    0  int read_pos = 0;
   8    0  void queue_add(int item)
   9    0  {
  10    0      buffer[write_pos] = item;
  11    5      write_pos = (write_pos + 1) % N;
  12   12  }
  13   13  int queue_get()
  14   13  {
  15   13      int item;
  16   13      item = buffer[read_pos];
  17   19      read_pos = (read_pos + 1) % N;
  18   26      return item;
  19   30  }
  20   31  
  21   31  void prod1(int i, int n){
  22   31  	for(i; i <= n; i=i+1){
  23   42  		wait(s2);
  24   44  		queue_add(i);
  25   48  		signal(s);
  26   50  	}
  27   51  	signal(t);
  28   53  }
  29   54  
  30   54  void prod2(int i, int n){
  31   54  	wait(t);
  32   56  	for(i; i<=n; i=i+1){
  33   67  		wait(s2);
  34   69  		queue_add(i);
  35   73  		signal(s);
  36   75  	}
  37   76  }
  38   77  
  39   77  void kons(int n){
  40   77  	int i = 0;
  41   80  	int liczba;
  42   80  	for(i = 0; i < n; i = i+1){
  43   94  		wait(s);
  44   96  		liczba = queue_get();
  45  101  		signal(s2);
  46  103  		cout << "Pobralem" <<liczba<< endl;
  47  107  	}
  48  108  }
  49  109  
  50  109  main()
  51  110  {
  52  110  initialsem(s2, 5);
  53  113  initialsem(s, 0);
  54  116  initialsem(t, 0);
  55  119  	cobegin {
  56  120  		prod1(1, 25); prod2(101, 125);  kons(50);
  57  134  	}
  58  135  }