【发布时间】:2015-05-13 13:07:17
【问题描述】:
我需要通过两个不同的任务访问一个任务的两个不同条目。看起来我对 Ada 的了解不足以执行此操作,我也花了很多时间寻找解决方案但没有任何效果。我尝试使用受保护的类型作为管理器,但它不起作用。我希望我的访问任务在每个条目中将计数器增加 1,然后在计数器达到 2 后在第一个条目中执行更多工作。我的方法是这样的
task mainTask is
entry first(n : in Integer);
entry second(n : in Integer);
end mainTask;
task body mainTask is
counter : Integer := 0;
begin
loop
accept first(n : in Integer) do
loop
counter := counter + 1;
Put_Line("First one working");
--loop and wait until counter is 2
--perform rest of the code
delay 1.0;
end loop;
end first;
accept second(n : in Integer) do
loop
counter := counter + 1;
Put_Line("Second one working");
delay 1.0;
end loop;
end second;
end loop;
end mainTask;
task firstTask;
task body firstTask is
begin
mainTask.first(0);
end firstTask;
task secondTask;
task body secondTask is
begin
mainTask.second(0);
end secondTask;
运行后,firstTask 正在访问第一个条目并进入无限循环,第二个无法访问第二个条目。我明白它为什么会发生,但我想不出可能有用的东西。 也许有类似接受第一(..)和接受第二(..)的东西。 提前谢谢!
【问题讨论】:
-
我认为您需要从外部告诉我们您想要发生的事情(不能涉及
counter,因为它是main_task本地的)。 -
从字面上看,我需要对一台机器(任务)进行编程,该机器(任务)需要两个工人(工人是一组任务)同时按下两个不同的按钮,以便机器能够做某事。
标签: multithreading task ada