Delay 语句是否将进程置于阻塞状态?

Phi*_* La 2 concurrency state process ada

如果我们在 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;
Run Code Online (Sandbox Code Playgroud)

就进程状态而言,我指的是下图中显示的进程/线程状态:

在此处输入图片说明

Jim*_*ers 5

根据 Ada 2012 参考手册第9.6节:

对于延迟语句的执行,首先计算延迟表达式。对于 delay_until_statement,延迟的到期时间是 delay_expression 的值,在与表达式类型关联的时基中。对于 delay_relative_statement,过期时间定义为当前时间,在与相对延迟相关的时基中,加上 delay_expression 转换为类型 Duration 的值,然后向上取整到下一个时钟滴答。与相对延迟相关的时基在 D.9“延迟精度”中定义或由实现定义。

执行 delay_statement 的任务会被阻塞,直到达到到期时间,此时它再次准备就绪。如果过期时间已经过去,则任务不会被阻塞。