我对Ada中的“select then abort”语言结构有疑问。我正在使用的任务看起来像:
select
delay 1.0;
do something with the partial result;
then abort
loop
...
long calculation
...
entry call to other task;
...
end loop;
end select;
中止分支中的代码可以在任何地方中止或仅在某些点(如延迟语句或入口调用)中止? 在我的程序中,中止分支中的代码执行长计算,当中止时,部分计算结果仍然有用。但是,如果代码可以在任何地方中断,则会出现数据不一致的问题。
谢谢
答案 0 :(得分:2)
中止可以发生在任何地方,除了在中止延迟区域。受保护的操作是中止延迟区域,因此您可以将部分结果存储在受保护对象中。
答案 1 :(得分:1)
根据adaic.org处的信息,then abort
和end select
之间的部分可以在任何地方中止。