Deutsch   English   Français   Italiano  
<v5r3ma$e60t$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Lawrence D'Oliveiro <ldo@nz.invalid>
Newsgroups: comp.lang.ada
Subject: Parallel Sieve Of Eratosthenes
Date: Sun, 30 Jun 2024 08:06:35 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 44
Message-ID: <v5r3ma$e60t$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Sun, 30 Jun 2024 10:06:35 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="4341965ad4e2fb75a1b93d496a5627b7";
	logging-data="464925"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18FCMaDlRB+t93flANBSx9P"
User-Agent: Pan/0.158 (Avdiivka; )
Cancel-Lock: sha1:If43Ky218kvseUlpfn+SpxDAyjw=
Bytes: 1871

with Ada.Text_IO;
use Ada;
procedure parasieve1 is

    task type child is

        entry next_int(i : integer);

    end child;

    subtype offspring is child;
      -- need another name because "child" within child refers to
      -- current task, not to the type

    task body child is

        my_prime : integer;
        subchild : access offspring;

    begin
        accept next_int(i : integer) do
            my_prime := i;
            Text_IO.Put_line(integer'image(my_prime));
        end next_int;
        subchild := new offspring;
        loop
            accept next_int(i : integer) do
                if i mod my_prime /= 0 then
                    subchild.next_int(i);
                end if;
            end next_int;
        end loop;
    end child;

    first_child : child;
    i : integer;

begin -- parasieve1
    i := 1;
    loop
        i := i + 1;
        first_child.next_int(i);
    end loop;
end parasieve1;