2011-10-24 6 views
1

私はシーケンシャルロジックを実行するタスクを持っており、このタスクが別のタスクからそのロジックを実行するのを止めたいと考えています。ランデブーを起こさずにこれを行う方法はありますか? タスクを中断するにはどうしたらいいですか? ありがとうございます。Adaで緊急に課題を通知するには?

+0

人々が情報に応じた回答をする前に、より詳細な情報を提供したい場合があります。 – NWS

答えて

3

Asynchronous Transfer of Controlを使用して、停止する部分をabortable_partに配置するか、直接abortを使用してタスクを強制終了することができます。

GNATを使用している場合、GNAT.Taskingパッケージを見ることができます。

2

一般的に、保護対象フラグなどの「チェックポイント」を使用して順次ロジックを構成する方がよい場合があります。ここで、中止する信号があるかどうかを簡単にテストできます。保護されたオブジェクトは、この種の高速テストをサポートする軽量な並行性メカニズムとして設計されています。

それ本当には、ステートメントのシーケンスでどの時点で中断する必要がありますか?ステートメントブロックまたは反復を完了し、フラグチェックを実際に容認できないものにするために必要なマイクロ秒またはミリ秒の余分なコストはありますか?どのくらいの頻度で処理シーケンスを中止する必要がありますか?

処理を途中で終了する信号をテストするための明確なチェックポイントを設定すると、シーケンスが既知の状態で終了することが保証され、何かがうまくいかない場合に正しい動作とデバッグが確認できます。

1

protected objectの中に実装することで、この操作やデータが何であれ保護することができます。

何らかのロックスキームを探しているような気がします。 Adaで保護されたオブジェクトを使用してあらゆる種類のさまざまなロック方式を実装するのはかなり簡単です。この方法では、特定のタスク間で明示的なハンドシェイクは必要ありません。

関連する問題