Advertisement
icebit

ADA_SEMAFORY_DOSPRAWKA XDDD

May 25th, 2016
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ada 1.55 KB | None | 0 0
  1. with ada.Text_IO;
  2. use ada.Text_IO;
  3. with ada.Integer_Text_IO;
  4. use ada.Integer_Text_IO;
  5.  
  6. procedure Main is
  7.  
  8.    task type mytask;
  9.    task type mytask1;
  10.  
  11.    th1: mytask;
  12.    th2: mytask1;
  13.  
  14.  
  15.    task type Semaphore_T  is
  16.       entry Initialize(n : Natural);
  17.       entry Wait;
  18.       entry Signal;
  19.    end Semaphore_T;
  20.  
  21.    task body Semaphore_T  is
  22.       Count: Natural;
  23.    begin
  24.       accept Initialize(n: in Natural) do
  25.         Count := n;
  26.    end Initialize;
  27.    loop
  28.       select
  29.          when Count>0 =>
  30.             accept Wait do
  31.                Count := Count - 1;
  32.             end Wait;
  33.          or
  34.  
  35.          accept Signal do
  36.                Count := Count + 1;
  37.             end Signal;
  38.       end select;
  39.    end loop;
  40. end Semaphore_T;
  41.    sem_Z : Semaphore_T;
  42.    sem_W : Semaphore_T;
  43. type Bufor is array(Natural Range<>) of Integer;
  44.    buf: Bufor(1..5);
  45.  
  46.    --WATEK CZYTAJACY
  47.    task body mytask is
  48.       a: Integer;
  49.       odczytana: Integer;
  50.    begin
  51.       a:=1;
  52.          loop
  53.          sem_Z.Wait;
  54.          odczytana:= buf((a rem 5) +1) ;
  55.          Put(odczytana);
  56.          sem_W.Signal;
  57.          a:= a+1;
  58.  
  59.       end loop;
  60.  
  61.       end mytask;
  62.  
  63.  
  64.    task body mytask1 is
  65.       a: Integer;
  66.       do_zapisu: Integer;
  67.    begin
  68.       do_zapisu:=100;
  69.       a:=1;
  70.       loop
  71.  
  72.          sem_W.Wait;
  73.          buf((a rem 5) +1)  := do_zapisu;
  74.          sem_Z.Signal;
  75.          do_zapisu:=do_zapisu+3;
  76.          a:= a+1;
  77.  
  78.       end loop;
  79.    end mytask1;
  80.  
  81. begin
  82.  
  83.    sem_W.Initialize(5);
  84.    sem_Z.Initialize(0);
  85.  
  86.    null;
  87. end Main;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement