pragma Task_Dispatching_Policy(Non_Preemptive_FIFO_Within_Priorities) 的使用示例;
Usage example of pragma Task_Dispatching_Policy(Non_Preemptive_FIFO_Within_Priorities);
我有一个大型的、面向任务的程序,我想探索变体调度程序策略。我正在使用 Gnat Ada 2020。特别是,我想通过使用编译指示来设置任务模型:
pragma Task_Dispatching_Policy(Non_Preemptive_FIFO_Within_Priorities);
我觉得我不太了解实际的用法。我了解编译指示的作用,但至少根据 GNAT 的说法,我很难正确放置编译指示。对于以下小程序中的各种放置组合,我总是得到错误:
“配置 pragma“Task_Dispatching_Policy”的位置不正确
我已经在整个编译单元之外、任务类型规范内、任务主体规范内等进行了尝试。任何人都可以向我展示这个 pragma 的用法示例吗?谷歌搜索发现很多讨论,但在源代码中没有实际使用示例。提前致谢。
with Ada.Text_IO; Use Ada.Text_Io;
procedure Test is
Task Type One is
End;
Task Type Two;
Task body One is
Begin
Loop
Put_line("Task one 11111111111111111");
End Loop;
End;
Task body Two is
Begin
Loop
Put_line("Task two 2222222222222222");
End Loop;
End;
a : One;
B : two;
begin
Null;
End;
如下所述,我在UG中发现了一些关于将pragma放在'gnat.adc'文件中的东西,这似乎生效但并没有完全阻止切换,这是我所期望的。我应该提到我在 Windows 10 环境中。
我认为这是通过@egilhh 的评论回答的。如果他发布一个我能够接受的帖子,我会很高兴接受他的。
I am having difficulty placing the pragma correctly.
注意正确放置,注意 Task_Dispatching_Policy
pragma is a configuration pragma that must "appear before the first compilation_unit of a compilation。"
at least according to GNAT.
作为@egilhh , the GNAT User Guide describes how tp accomplish this in 3.4.1. Handling of Configuration Pragmas:
Configuration pragmas may either appear at the start of a compilation unit, or they can appear in a configuration pragma file to apply to all compilations performed in a given compilation environment.
在单个编译单元的情况下,只需将 pragma 放在第一个上下文子句之前,如图 :
pragma Task_Dispatching_Policy(…);
with Ada.Text_IO; use Ada.Text_IO;
…
要更广泛地应用 pragma,请将其添加到 gnat.adc
,如 §3.4.2. The Configuration Pragmas Files 中所述。
我有一个大型的、面向任务的程序,我想探索变体调度程序策略。我正在使用 Gnat Ada 2020。特别是,我想通过使用编译指示来设置任务模型:
pragma Task_Dispatching_Policy(Non_Preemptive_FIFO_Within_Priorities);
我觉得我不太了解实际的用法。我了解编译指示的作用,但至少根据 GNAT 的说法,我很难正确放置编译指示。对于以下小程序中的各种放置组合,我总是得到错误: “配置 pragma“Task_Dispatching_Policy”的位置不正确 我已经在整个编译单元之外、任务类型规范内、任务主体规范内等进行了尝试。任何人都可以向我展示这个 pragma 的用法示例吗?谷歌搜索发现很多讨论,但在源代码中没有实际使用示例。提前致谢。
with Ada.Text_IO; Use Ada.Text_Io;
procedure Test is
Task Type One is
End;
Task Type Two;
Task body One is
Begin
Loop
Put_line("Task one 11111111111111111");
End Loop;
End;
Task body Two is
Begin
Loop
Put_line("Task two 2222222222222222");
End Loop;
End;
a : One;
B : two;
begin
Null;
End;
如下所述,我在UG中发现了一些关于将pragma放在'gnat.adc'文件中的东西,这似乎生效但并没有完全阻止切换,这是我所期望的。我应该提到我在 Windows 10 环境中。
我认为这是通过@egilhh 的评论回答的。如果他发布一个我能够接受的帖子,我会很高兴接受他的。
I am having difficulty placing the pragma correctly.
注意正确放置,注意 Task_Dispatching_Policy
pragma is a configuration pragma that must "appear before the first compilation_unit of a compilation。"
at least according to GNAT.
作为@egilhh
Configuration pragmas may either appear at the start of a compilation unit, or they can appear in a configuration pragma file to apply to all compilations performed in a given compilation environment.
在单个编译单元的情况下,只需将 pragma 放在第一个上下文子句之前,如图
pragma Task_Dispatching_Policy(…);
with Ada.Text_IO; use Ada.Text_IO;
…
要更广泛地应用 pragma,请将其添加到 gnat.adc
,如 §3.4.2. The Configuration Pragmas Files 中所述。