デッドロックの処理方法を理解するのに少し苦労しています。まず、自分がとれる行動にはどのようなものがあるでしょうか。さらに、通常どのようなアクションが取られ、どれが「最適」ですか? ありがとうございました。
4 に答える
停止問題が原因で、そもそもデッドロックを常に検出できるとは限りません。
しかし、合理的な疑いがあると仮定すると、選択の余地はあまりありません。あなたはできる:
ロックを保持しているすべてのスレッドに割り込みます (つまり、シグナル/例外を送信します)。ただし、結果として生じる割り込みを処理できる必要があります。
関連するすべてのスレッド/プロセスを強制終了します。これは抜本的なアクションであり、一部のデータがプログラムによって失われる可能性があるというリスクを犠牲にして、システムの残りの部分を節約します。
プロセスがデッドロックするのを一時的に防ぎます。プロセスを何らかのチェックポイントまでバックオフして、必要なリソースを先取りし、後でチェックポイントでプロセスを再起動できるようにします。システムがデッドロックから解放されるまで、プロセスを連続して強制終了します。
デッドロックの処理方法を尋ねています。これは正しい質問ではありません。避けるべきです。現実的には、プログラムはそれらから回復できないため、それらが発生しないことを確認してください。
デッドロック状態のタスクの一部を強制終了して、他のタスクが処理を続行し、デッドロック状態に留まらず、すぐにデッドロック状態に戻ることを期待できます。これは特に信頼できるものではありません。
デッドロックされたすべてのタスクを強制終了できます。これにより、外部の介入がなければ決して使用されないリソースが解放されます。しかし、あなたのタスクは死んでしまいました。また、すべてのタスクを再起動したとしても、再びデッドロックできない理由はありません。
@usr が言うように、正しいことは、そもそもデッドロックを回避することです。潜在的なデッドロックは、システムに重大な欠陥があることを示しており、おそらく設計を再考する必要があります。