A feladat a következő: Imi 5-öst kapott Adából és ezt el akarja mondani telefonon egyik ismerősének. Az elésővel kezdi, fehívja és vár egy kicsit, hogy ő felvegye. Ha nem veszi fel az első ismerőse, akkor hívja a másodikat és így tovább. (Most 3 ismerőse van.) Az ismerősök pedig úgy működnek, hogy bemennek a szobájukba, ha épp csörög a telefpn felveszik, ha nem, akkor egy időre elhagyják a szobát. (Ilyenkor nem hallják a csörgést.) Szimuláljuk ezt az esetet addig amíg Iminek sikerül valakivel beszélnie.
 
with ada.text_io, ada.numerics.discrete_random; 
use ada.text_io; 
 
procedure telefon is 
   subtype int is integer range 1..3
   package irand is new ada.numerics.discrete_random(int); 
   use irand; 
    
   type ismeros_tipus is (Kati, Jani, Sanyi); 
   task type ismeros(ism : ismeros_tipus) is 
      entry hiv; 
   end ismeros; 
   task Imi; 
A sim taszk mondja meg, hogy tart-e még a szimuláció. Ezt később védett objektumokkal szebben meg tudjuk oldani
   task sim is 
      entry vege(b : out boolean); 
      entry legyen_vege; 
   end sim; 
    
   task body sim is 
      bb : boolean := false; 
   begin 
      loop 
         select 
            accept vege(b : out boolean) do 
               b := bb; 
            end vege; 
         or 
            accept legyen_vege do 
               bb := true;  
            end legyen_vege; 
         or 
            terminate
         end select
      end loop
   end sim; 
    
   task body ismeros is 
      b : boolean; 
      g : generator; 
   begin 
      reset(g); 
      delay duration(random(g)); 
      sim.vege(b); 
      while not b loop 
         select  
            accept hiv do 
               put_line(ismeros_tipus'image(ism) & ": sikerult velem beszelni"); 
               sim.legyen_vege; 
            end hiv; 
         else 
            put_line(ismeros_tipus'image(ism) & ": nem volt dumcsi"); 
            delay duration(random(g)); 
         end select
         sim.vege(b); 
      end loop
   end ismeros; 
    
   i1 : ismeros(Kati); 
   i2 : ismeros(Jani); 
   i3 : ismeros(Sanyi); 
 
   task body Imi is 
      b : boolean := false; 
   begin 
      while not b loop 
         select 
            i1.hiv; 
            exit
         or 
            delay 1.0
            put_line("Nem sikerult Katival beszelnem"); 
         end select
          
         select 
            i2.hiv; 
            exit
         or 
            delay 1.0
            put_line("Nem sikerult Janival beszelnem"); 
         end select
          
         select 
            i3.hiv; 
            exit
         or 
            delay 1.0
            put_line("Nem sikerult Sanyival beszelnem"); 
         end select
 
      end loop
   end Imi; 
 
begin 
   null
end telefon; 
 
 
VISSZA