阿达。如何在运行时设置任务优先级?

时间:2016-12-08 13:21:58

标签: task ada

首先让我们解决这个问题。我是Ada的初学者,我希望能够做到这一点的原因是因为我想编写优先级倒置。

我已经包括了,

with Ada.Task_Identification; 

我还创建了一个任务类型:

task type tasktype1 is
      pragma PRIORITY (20);
      entry gotosleep; 
end tasktype1;

我宣布了一项任务:

High : tasktype1;

现在我想将任务“高”的优先级更改为其他优先级。

我试过写作:

High.Prority(1); 

我将把它放在main的开始块中。

并声明了一个Task_ID。

 A : Task_Id;

然后尝试使用A := Current_Task;

获取当前任务

然后将Priority(3,A);放入主电源中。

以下是我的所有参考代码:

with Ada.Text_IO, Ada.Integer_Text_IO, System, Ada.Task_Identification; 
use Ada.Text_IO, Ada.Integer_Text_IO; 

procedure Main is

task type tasktype1 is
      pragma PRIORITY (20);
      entry gotosleep; 
end tasktype1;

pragma PRIORITY (3);   -- This is the priority for the main program

High : tasktype1;

  A : Task_Id;

task body tasktype1 is
   begin

accept gotosleep do 
     Put("Cow is not sleeping"); 

 end gotosleep; 
end tasktype1;




begin

   A := Current_Task; 
    Priority(3, A); 

   Put_Line("This is an example of use of a task type");
   Put_Line("This is an example of use of a task type");
   Put_Line("This is an example of use of a task type");
   Put_Line("This is an example of use of a task type");
   Put_Line("This is an example of use of a task type");

end Main;

2 个答案:

答案 0 :(得分:0)

请参阅:http://www.adaic.org/resources/add_content/standards/05rm/html/RM-D-5-1.html


TLDR; (如果您希望设置/获取当前任务的优先级)

  1. "与" Ada来源的包裹:

    with Ada.Dynamic_Priorities;
    
  2. 调用Set_Priority过程

    Ada.Dynamic_Priorities.Set_Priority(1);
    
  3. 如果您想了解当前的优先顺序,可以致电

    Ada.Dynamic_Priorities.Get_Priority;
    

答案 1 :(得分:0)

首先,关于任务优先级,您必须检查操作系统的功能。

例如,在Linux或Solaris上,您只能以root用户身份使用priority。否则,无论您在代码中设置了什么,操作系统都会为每个任务赋予相同的优先级。 在Windows上,我没有检查可用的任务策略是什么,但是默认情况下,我会说所有任务都具有相同的优先级。

完成后,下面的解决方案应该可以正常工作。