如何讓這些任務同時運行,以便「N世界的Hello World」消息會混淆?任務不同時運行
我的輸出看起來總是像這樣,除了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;
你能不能給排序輸出你期望,如示例你在期待「HHeHelel WorWorld」還是類似的?如果是這樣,那麼您通常無法看到的原因是由於操作系統或Ada運行時庫中的行緩衝。 –
@JackWhitham好吧,那也是我的想法。但我不確定。那麼,我的例子中的任務是否真的在同時運行? – user1091344
是的。如果你喜歡,你可以通過爲每個程序添加一個循環和一個延遲來測試。 –