Synchronization Ada:select然后abort语句

Synchronization Ada:select然后abort语句,synchronization,task,ada,Synchronization,Task,Ada,我有一个关于Ada中“选择然后中止”语言结构的问题。我正在使用的任务类似于: select delay 1.0; do something with the partial result; then abort loop ... long calculation ... entry call to other task; ... end loop; end select; 中止分支中的代码可以在任何地方中止,还是只能在某些点(如延迟语句

我有一个关于Ada中“选择然后中止”语言结构的问题。我正在使用的任务类似于:

select
  delay 1.0;
  do something with the partial result;
then abort
  loop 
    ...
    long calculation
    ...
    entry call to other task;
    ...
  end loop;
end select;
中止分支中的代码可以在任何地方中止,还是只能在某些点(如延迟语句或入口调用)中止? 在我的程序中,abort分支中的代码执行长时间的计算,当中止时,部分计算结果仍然有用。但是,如果代码可以在任何地方中断,就会出现数据不一致的问题


谢谢

根据上的信息,介于
然后中止
结束选择
之间的部分可以在任何地方中止。

中止可以在任何地方发生,但中止延迟区域除外。受保护的操作是一个中止延迟区域,因此您可以将部分结果存储在受保护的对象中。

他们说任务只能在中止完成点中止。那么你确定你的答案是正确的吗?要求被中止的构造不迟于下一个中止完成点(,19.b中的实现说明说“实现当然可能比在每个中止完成点更频繁地检查中止;理想情况下,将提供完全先发制人的中止实现。如果给定环境中不支持先发制人的中止,那么支持作为子程序调用和循环迭代一部分的中止检查可能是一个有用的选项。“任何合理的现代操作系统和编译器都将支持先发制人中止。如果您的平台受到限制,您应该检查编译器文档以了解确切的行为。我认为您是不对的。我的工作方式与上面的链接所述相同。