如果我们在Ada中有两个任务,如果我有一个延迟语句,不管是“延迟0.0”还是“延迟1.0",这是否使该进程处于阻塞状态?还是流程状态不适用于此?下面是一个简单的代码来说明我的问题:
with Ada.Text_IO; use Ada.Text_IO;
procedure Two_Tasks is
task Task_1;
task Task_2;
task body Task_1 is
begin
for I in 1 .. 10 loop
Put_Line ("Visited task 1, iteration number" & Integer'Image (I));
delay 0.0;
end loop;
end Task_1;
task body Task_2 is
begin
for I in 1 .. 10 loop
Put_Line ("Visited task 2, iteration number" & Integer'Image (I));
end loop;
end Task_2;
begin
Put_Line ("Visited the main task");
end Two_Tasks;在流程状态方面,我正在讨论图中显示的进程/线程状态:

发布于 2021-08-29 13:19:45
根据Ada 2012年参考手册第9.6节
对于delay_statement的执行,首先对delay_expression进行评估。对于delay_until_statement,延迟的过期时间是与表达式类型相关联的时间基中delay_expression的值。对于delay_relative_statement,过期时间定义为当前时间,在与相对延迟相关联的时间基中,加上转换为类型持续时间的delay_expression值,然后舍入到下一个时钟滴答。与相对延迟相关的时间基础如D.9所定义的“延迟准确性”或实现定义。执行delay_statement的任务将被阻塞,直到到达到期时间,此时它再次就绪。如果过期时间已经过去,则任务不会被阻塞。
https://stackoverflow.com/questions/68971117
复制相似问题