::
x70_cc1.ada
package Pack_factorial is
task type Task_factorial is -- Specification
entry start( f:in Positive ); -- Rendezvous
entry finish( result:out Positive ); -- Rendezvous
end Task_factorial;
end Pack_factorial;
package body Pack_factorial is
task body Task_factorial is -- Implementation
factorial : Positive;
answer : Positive := 1;
begin
accept start( f:in Positive ) do -- Factorial
factorial := f;
end start;
for i in 2 .. factorial loop -- Calculate
answer := answer * i;
end loop;
accept finish( result:out Positive ) do -- Return answer
result := answer;
end finish;
end Task_factorial;
end Pack_factorial;
package Pack_is_a_prime is
task type Task_is_prime is -- Specification
entry start( p:in Positive ); -- Rendezvous
entry finish( result:out Boolean ); -- Rendezvous
end Task_is_prime;
end Pack_is_a_prime;
package body Pack_is_a_prime is
task body Task_is_prime is -- Implementation
prime : Positive;
answer: Boolean := TRUE;
begin
accept start( p:in Positive ) do -- Factorial
prime := p;
end start;
for i in 2 .. prime-1 loop -- Calculate
if prime rem i = 0 then
answer := FALSE; exit;
end if;
end loop;
accept finish( result:out Boolean ) do -- Return answer
result := answer;
end finish;
end Task_is_prime;
end Pack_is_a_prime;
with Simple_io, Pack_factorial, Pack_is_a_prime;
use Simple_io, Pack_factorial, Pack_is_a_prime;
procedure main is
thread_1 : Task_factorial;
thread_2 : Task_factorial;
thread_3 : Task_is_prime;
factorial: Positive;
prime : Boolean;
begin
thread_1.start(5); -- Start factorial calculation
thread_2.start(7); -- Start factorial calculation
thread_3.start(97); -- Start is_prime calculation
put("Factorial 5 is ");
thread_1.finish( factorial ); -- Obtain result
put( factorial ); new_line;
put("Factorial 8 is ");
thread_2.finish( factorial ); -- Obtain result
put( factorial ); new_line;
put("97 is a prime is ");
thread_3.finish( prime ); -- Obtain result
if prime then put("True"); else put("False"); end if; new_line;
end main;
© M.A.Smith University of Brighton.
Created September 1995 last modified May 1997.
Comments, suggestions, etc.
M.A.Smith@brighton.ac.uk
*
[Home page]