如何在Ada中紧急通知任务?

时间:2011-10-24 08:24:43

标签: task ada

我有一个执行顺序逻辑的任务,我想阻止此任务从另一个任务执行其逻辑。有没有办法在不引起约会的情况下做到这一点? 我该如何暂停任务? 提前谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用Asynchronous Transfer of Control并将要停止的部分放入abortable_part,或直接使用abort来终止该任务。

如果您使用GNAT,您可以查看GNAT.Tasking包。

答案 1 :(得分:2)

通常最好使用“检查点”构建顺序逻辑,例如受保护对象标志,可以进行简短测试以查看是否有中止信号。受保护对象被设计为轻量级并发机制,以支持这种快速测试。

真的是否需要在语句序列中的任何点处中断?完成语句块或迭代并进行标记检查所需的额外微小或毫秒的成本是否真的不可接受?您多久预计需要中止处理顺序?

有明确定义的检查点来测试信号以提前终止处理,这可以确保序列以已知状态退出,这有助于验证正确的操作和调试是否出现问题。

答案 2 :(得分:1)

您可以通过在protected object内实施来保护此操作或数据。

听起来我正在寻找某种锁定方案。使用Ada保护对象实现各种不同的锁定方案相当容易,这样您就不需要在特定任务之间进行显式握手。