具体来说,是否有一种方法可以使任务获得对自身的引用?

例如:

task type someTask;
type someTaskAccessor is access someTask;

task body someTask is
    pointerToTask : someTaskAccessor;
begin
    pointerToTask = this;
end someTask;

最佳答案

我建议的最明显的解决方案是在任务开始时声明一个集合(条目),并向其传递对刚刚创建的任务的引用。另一种可能性是对您的任务类型使用判别式,其职责是告诉新任务它的位置(将对新任务的访问权传递给判别式)。不幸的是,我手头没有Ada编译器,因此我无法给您任何有效的示例。

无论如何,根据您的评论:需要在某个地方处理新任务的创建,这时您还需要确定此新任务将进入双向链接列表的位置(您需要知道至少一个现有任务)在创建新的以便与他们交流时:他们不会神奇地发现自己)。当您拥有新创建的任务及其左右同伴时,您可以利用这一时刻告诉每个人谁是他们的邻居(再次使用集合点)。

09-10 19:44