gpt4 book ai didi

task - 任务中的意外输出?

转载 作者:行者123 更新时间:2023-12-04 02:21:57 26 4
gpt4 key购买 nike

为什么下面的代码不能确定 task_1 应该先执行然后 task_2 因为处于等待状态的 task_1 从 main 获得第一个启动消息?但输出是不可预测的请帮我理解?

 WITH Ada.Text_IO;                  --  Include Text_IO Library
WITH Ada.Integer_Text_IO; -- Include Integer Text_IO Library
PROCEDURE task_demo_02 IS
TASK TYPE intro_task (message1 : Integer) IS
ENTRY start; -- Entry Point Into The Task
END intro_task;

TASK BODY intro_task IS -- Task Body Definition
BEGIN
ada.text_io.put_line("waitng");
ACCEPT start; -- Entry Point Into The Task
Ada.Text_IO.put ( "Display from Task ");
Ada.Integer_Text_IO.put (message1, 1);
Ada.Text_IO.new_line;
END intro_task;
Task_1 : intro_task (message1 => 1);--activate
Task_2 : intro_task (message1 => 2);--activate

BEGIN
ada.Text_IO.put_line("main");
Task_1.start; --- first task_1 should execute
Task_2.start; --- then task_2 isn't it ?
END task_demo_02;

最佳答案

BEGIN
ada.Text_IO.put_line("main");
Task_1.start; --- first task_1 should execute

您的评论似乎假设这将导致 Task_1 执行,并且 Task_1 将结束执行直到完成,然后主程序将继续执行 Task_2.start.

但事实并非如此。 Task_1.start 表示 Task_1 现在已准备好执行。但此时,有两个任务准备执行:Task_1环境任务,即正在运行 task_demo_2 的任务。您无法真正判断哪个任务先运行(有一些调度策略将指定在这种情况下任务如何运行,但通常您无法判断)。这意味着 task_demo_02 可以继续运行,这意味着 Task_2.start 将在 Task_1 继续之前发生。或者它可能意味着 Task_1 开始,但处理器将在 Task_1task_demo_02 之间分配时间。或者,在多处理器系统上,它们可以并行运行。

如果您想编写一个主程序启动 Task_1 并等待它完成的程序,最可靠的方法是添加另一个条目:

TASK TYPE intro_task (message1 : Integer) IS  
entry Start;
entry Finish;
END intro_task;

Task_1.Start;
Task_1.Finish;

然后,在 intro_task 的末尾添加

accept Finish;

关于task - 任务中的意外输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com