Как я могу запустить эти задачи одновременно, чтобы сообщения «Hello World from N» были замешаны?Задачи не запускаются одновременно
Мой вывод всегда выглядит так, за исключением того, что 1, 2 или 3 могут быть взаимозаменяемы.
Hello World from 1!
Hello World from 2!
Hello World from 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;
Можете ли вы привести пример подобного вывода вы ожидаете, например, вы ожидаете «HHeHlloel WorWorld» или подобное? Если это так, причина, по которой вы обычно не видите это, связана с буферизацией строк в операционной системе или библиотеке времени исполнения Ada. –
@JackWhitham Хорошо, вот что я и думал. Но я не был уверен. Итак, задачи действительно работают одновременно в моем примере? – user1091344
Да. Если вам нравится, вы можете проверить это, добавив цикл и задержку для каждой процедуры. –