ライブマルチスレッドアプリケーションでデッドロックを検出する方法は何ですか?ライブアプリケーションのデッドロックを検出する方法
デッドロックがある場合は、アプリケーションを停止/再起動することなく、デッドロックを解決する方法はありますか?
答えて
デッドロックを検出する一般的な方法は2つあります。
1つはスレッドにチェックポイントを設定させることです。たとえば、ワークループを持つスレッドがある場合は、作業を開始するときに、作業に時間がかかる可能性があると考えられるよりも長く設定されているタイマーを設定します。タイマーが起動すると、スレッドがデッドロックしているとみなされます。作業が完了したら、タイマーをキャンセルします。
別の(組み合わせて使用されることもある)別のスレッドは、スレッドがブロックする可能性のある他のリソースを追跡する可能性があることがあります。これは、他のスレッドが逆の順序でこれらのロックを取得したときに、別のスレッドを保持しながら一方のロックを取得しようとする試みを直接検出できます。
デッドロックが実際に発生することなく、デッドロックの危険性を検出することさえできます。一方のスレッドがロックAとBを取得し、もう一方のスレッドがロックBとAを取得した場合、重複しない限りデッドロックは発生しません。しかし、この方法はそれを検出することができます。
アドバンストデッドロック検出は、通常、デバッグ中にのみ使用されます。デッドロックの可能性を各ブロッキング・ロックでチェックするアプリケーションをコーディングする以外に、デッドロックが発生した場合の対処方法を知っているだけで、デッドロックが発生した後でアプリケーションを停止させることができます。ロックされているリソースが矛盾した状態にある可能性があるため、ロックを盲目的に解放することはできません。
デッドロックが発生する可能性のあるコードを意図的に記述し、問題を回避するためにコードを記述することがあります。たとえば、多くのスレッドがロックAを取得してからロックBを獲得しようとしている場合、他のスレッドはその逆を行う必要があることを知っている場合、Bをロックし、 。
通常、デッドロックを検出してデッドロックを回避するのではなく、デッドロックを不可能にすることは、通常は役に立ちます。
- 1. Mysqlデッドロック検出
- 2. Oracleデッドロック検出ツール
- 3. デッドロック検出アルゴリズム(擬似コード)
- 4. SQL Server 2005のデッドロック検出ツール
- 5. Javaのデッドロックを予測する方法
- 6. ライブアプリケーションでrb_backtraceを呼び出すことは安全です。
- 7. プログラムを検出して見つけ出す方法がデッドロックになっていますか?
- 8. アンドロイドデバイスマイクのブローを検出する方法
- 9. 空の値を検出する方法
- 10. MetaMaskのログインを検出する方法
- 11. 「?」を検出する方法リダイレクトのサイトリンク
- 12. イメージのホットスポットを検出する方法
- 13. codenameoneのデバイスバックボタンイベントを検出する方法
- 14. MPMoviePlayerViewControllerのタッチを検出する方法
- 15. エミュレータの検出をバイパスする方法
- 16. ヘッドレスサービスのエンドポイントを検出する方法
- 17. テキストの影を検出する方法
- 18. pyzmqのポーリングタイムアウトを検出する方法
- 19. Elmのブラウザを検出する方法
- 20. オブジェクトのクリックを検出する方法
- 21. PostgreSQLのデッドロックが検出されました
- 22. は、メソッドを振っ検出xcode4で検出揺れ方法を検出する方法xcode4
- 23. iScroll 5、スクロールイベントを検出する方法
- 24. GCCスタックバッファオーバーフローを検出する方法
- 25. 悪いビデオストリームを検出する方法
- 26. angeljsでインターネットを検出する方法
- 27. 隠しプロセスを検出する方法
- 28. NSTextFieldでスペースキーを検出する方法
- 29. WKWebViewでhistory.pushstateを検出する方法
- 30. Xamarin iOS:テーブルビュースクロールを検出する方法
デッドロックを検出するためにJavaスレッドダンプを使用できますか?ブロックされたスレッドには通知できますが、デッドロックを検出できるかどうかは不明です。 –
@AmberBeriwalそれは働くことができます。すべてのスレッドスタックのダンプを使って、どのスレッドがロックを取得しようとしているのか、そしてどのスレッドがそのロックを保持しているのかを調べることができます。あなたがスレッドをたくさん持っているのは面倒ですが、不可能ではありません。 –