Как я могу запустить эти задачи одновременно, чтобы сообщения «Hello World from N» были перепутаны?
Мой вывод всегда выглядит так, за исключением того, что 1, 2 или 3 можно поменять местами.
Привет, мир от 1!
Привет, мир от 2!
Привет, мир от 3!
Не похоже, чтобы задачи выполнялись одновременно. Похоже, что он работает в цепочке в порядке очереди.
main.adb
with Ada.Text_IO;
procedure Main is
type Runnable_Type is access procedure;
task type Filter (Runnable_Access : Runnable_Type) is
entry start;
end Filter;
task body Filter is
begin
accept start;
Runnable_Access.all;
end Filter;
procedure Run_1 is
begin
Ada.Text_IO.Put_Line ("Hello World from 1!");
end Run_1;
procedure Run_2 is
begin
Ada.Text_IO.Put_Line ("Hello World from 2!");
end Run_2;
procedure Run_3 is
begin
Ada.Text_IO.Put_Line ("Hello World from 3!");
end Run_3;
Filter_1 : Filter (Run_1'Access);
Filter_2 : Filter (Run_2'Access);
Filter_3 : Filter (Run_3'Access);
begin
Filter_1.start;
Filter_2.start;
Filter_3.start;
end Main;