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