具体来说,是否有一种方法可以使任务获得对自身的引用?
例如:
task type someTask;
type someTaskAccessor is access someTask;
task body someTask is
pointerToTask : someTaskAccessor;
begin
pointerToTask = this;
end someTask;
最佳答案
我建议的最明显的解决方案是在任务开始时声明一个集合(条目),并向其传递对刚刚创建的任务的引用。另一种可能性是对您的任务类型使用判别式,其职责是告诉新任务它的位置(将对新任务的访问权传递给判别式)。不幸的是,我手头没有Ada编译器,因此我无法给您任何有效的示例。
无论如何,根据您的评论:需要在某个地方处理新任务的创建,这时您还需要确定此新任务将进入双向链接列表的位置(您需要知道至少一个现有任务)在创建新的以便与他们交流时:他们不会神奇地发现自己)。当您拥有新创建的任务及其左右同伴时,您可以利用这一时刻告诉每个人谁是他们的邻居(再次使用集合点)。