【发布时间】:2011-10-24 08:24:43
【问题描述】:
我有一个执行顺序逻辑的任务,我想阻止该任务从另一个任务执行其逻辑。有没有办法做到这一点而不会导致会合? 如何暂停任务? 提前致谢。
【问题讨论】:
-
您可能需要提供更多详细信息,然后人们才能在此处做出明智的回应。
我有一个执行顺序逻辑的任务,我想阻止该任务从另一个任务执行其逻辑。有没有办法做到这一点而不会导致会合? 如何暂停任务? 提前致谢。
【问题讨论】:
你可以使用Asynchronous Transfer of Control将你要停止的部分放入abortable_part,或者直接使用abort杀死任务。
如果你使用 GNAT,你可以看看 GNAT.Tasking 包。
【讨论】:
通常,最好使用“检查点”来构建时序逻辑,例如受保护的对象标志,可以在其中进行简短测试以查看是否有中止信号。受保护的对象被设计成一种轻量级的并发机制来支持这种快速测试。
真的需要在语句序列中的任何点被中断吗?完成语句块或迭代并进行标志检查所需的几微秒或毫秒的额外成本真的不可接受吗?您预计多久需要中止处理序列?
拥有明确定义的检查点来测试提前终止处理的信号可以确保序列以已知状态退出,这有助于验证正确的操作并在出现问题时进行调试。
【讨论】:
您可能会考虑通过在protected object 中实现此操作或数据来保护它。
在我看来,您正在寻找某种锁定方案。使用 Ada 保护对象实现各种不同的锁定方案相当容易,这样您就不需要在特定任务之间进行显式握手。
【讨论】: