デッドロックの処理方法を理解するのが少し難しいです。まず、何ができる行動のいくつかは何ですか?さらに、通常どのような行動が取られ、どの行動が「ベスト」ですか?ありがとうございました。デッドロックが検出されたときにシステムが実行できるアクションは何ですか?
答えて
さて、あなたは常に停止問題に起因する最初の場所でデッドロックを検出することはできません。
しかし、あなたが発生しているされ、合理的な疑いを持っていると仮定すると、あなたは多くの選択肢を持っていません。
ロックを保持するすべてのスレッドを中断する(つまり、シグナル/例外を送信する)ことができます。しかし、割り込みを処理できるようにする必要があります。
キルすべてのスレッド/プロセスが関与します。これは劇的なアクションであり、プログラムによって残りのデータが失われるリスクを犠牲にして残りのシステムを節約します。
あなたはデッドロックを扱うする方法を求めています。 これは正しい質問ではありません:あなたはそれらを避けるべきです。現実的には、あなたのプログラムがそれらから回復できないので、それらが起こらないことを確認してください。
この記事「デッドロックイミュニティ」に興味があると思います。 http://dslab.epfl.ch/pubs/dimmunix予防と治療の間には幾分かの差があります。 – ewernli
あなたがデッドロックタスクの一部を殺し、そして他の人が、その後進むことを願って、そして中に残っていないか、またはすぐにデッドロック、へフォールバックすることができます。これは特に信頼できるものではありません。
デッドロックされたタスクをすべて終了することができます。これにより、外部からの介入なしに決して使用されないリソースが解放されます。しかし、あなたの仕事は今や死んでしまっています。もしあなたが再びそれらを始めるなら、彼らが再びデッドロックすることはできません。 @usrが言うように
は、行うには正しいことは、最初の場所でのデッドロックを回避することです。潜在的なデッドロックはシステムに重大な欠陥があることを示しており、おそらく設計を再考する必要があります。
デッドロックされたプロセスからのリソースを一時的に防止します。 プロセスをいくつかのチェックポイントに戻して、必要なリソースを先取りし、後でチェックポイントでプロセスを再開できるようにします。 システムがデッドロックフリーになるまでプロセスを連続的に終了します。
- 1. Travis CIでコードが実行されたときの検出
- 2. Android、ウィジェットがクリックされたときにアクションを実行する
- 3. UIImageViewアニメーションが実行されたときに発生するアクション
- 4. デッドロックが検出されましたが、それを特定できません
- 5. iphoneがオフになったときに実行されるアクション
- 6. android:Doneキーが押されたときにSoftkeyboardがアクションを実行
- 7. rails assets:precompileシステムでYarn実行ファイルが検出されなかった
- 8. javafxでタブが選択されているときに何らかのアクションを実行するには?
- 9. java - JDialogでJPanelで実行されたアクションを検出
- 10. アクションを実行できるようにファイル/イメージが選択されたことを検出するにはどうすればよいですか?
- 11. ディスパッチャを呼び出すときにWPFアプリケーションがデッドロックされる
- 12. 再生ボタンがAVPlayerViewControllerでタップされたときにアクションを実行します。
- 13. ブースト・アクションが更新されたときにAWS EMRでブートストラップ・アクションを再実行する方法は?
- 14. 要素でjQueryのhide()メソッドが実行されたときの検出
- 15. TCLで変数が変更されたときに特定のアクションを実行
- 16. sqliteでデータが変更されたときに何らかのアクションを実装する方法は?
- 17. 検索が実行されたときにのみテキストを出力します
- 18. PL/pgSQL関数でデッドロックが検出されました
- 19. Excelシートが変更されたときにアクションを実行する - Office.js
- 20. Android:通話が切断されたときにアクションを実行する方法
- 21. アクションなしでjQueryアクションが検出されました
- 22. コードがcPythonまたはJython上で実行されているかどうかを検出できますか?
- 23. 依存ノードモジュールがrequire()されたときにプロジェクトにリンクされるのは何時(コンパイル/実行時)ですか?
- 24. アクションが実行されたときの時間をキャプチャするためのセレンコード
- 25. Androidでは、ユーザーがシステム通知トレイを開いたときにどのように検出できますか?
- 26. MySqlイベントが最後に実行されたときの検索
- 27. イベントのためにJavaScriptコードが実行されていることを検出できますか?
- 28. ユーザーがGAEアプリからログアウトしたときにアクションを検出して実行する
- 29. コンテンツがロードされたときにjQueryが検出する
- 30. フォントがEPUBで変更されたとき検出する
死んでロック!=無限ループ[Iはmistranslatingていない限りは...]、したがって、停止問題ではありません。 AFAIKのデッドロックとデータ競合は静的にも検出されますが、NP-Completeです。 – amit
@amit:2つのスレッドがお互いを待っているかどうかを確かめるのは簡単ですが、スリープ*スレッドが目を覚ますことを計画していないことはどうして分かりますか?明らかに、デッドロックの種類と、あなたが仮定していることに依存します。 – Mehrdad
静的に実行できる場合は、バイトコードを解析して動的に行うこともできます。私はデータレースが静的に見つかることができると確信しています、それはNP完全です、私はデッドロック問題と誤解されるかもしれません、あなたは削減を提供できますか? – amit