2011-10-27 17 views
3

UNIXの場合、プロセスが停止しています。デッドロックの可能性があると思われます。デッドロックの理由とその除去方法と回避方法を教えてください。UNIX上のプロセスのデッドロック理由を実際に見つける方法

私はデッドロックのための4つの条件を知っている:相互排他

  1. を:リソースは、時間(なしシェアリング)で最大1つのプロセスに割り当てることができます。

  2. 保留と待機:リソースを保持する処理で別のリソースを要求することができます。

  3. プリエンプションなし:プロセスはリソースを解放する必要があります。彼らは連れ去られない。

  4. 循環待ち:チェーンの各メンバーがチェーンの次のメンバーが保持するリソースを待っているような一連のプロセスが必要です。

しかし、理論的には、どのようにしてUNIX上でデッドロックを判断するのですか? プロセスが進行していないことを確認するだけですか? コードのどの部分がデッドロックとその原因を見つけるのか? ツールを使用することが許可されている場合、何が使用できますか?

ありがとう

+0

この質問はあまりにも一般的です。デッドロックしている特定のプログラムについて質問している場合は、詳細を伝えることができます。 –

+0

"プロセス"を "スレッド"に置き換えるとあなたの質問がより良くなると思いますか? – qqqqq

答えて

5

ValgrindののHelgrindツールもあります:Helgrind: a thread error detector

HelgrindはCで同期エラーを検出するためのValgrindのツールです、POSIX pthreadsスレッドを使用するC++およびFortranプログラムプリミティブ。

共通のアドレス空間、スレッドの作成、スレッドの結合、スレッドの終了、mutex(ロック)、条件変数(スレッド間イベントの通知)、リーダライタのロックを共有するスレッドの集合、スピンロック、セマフォ、バリア

  1. Misuses of the POSIX pthreads API

    Helgrindは、次の3つのセクションで詳細に説明されているエラー、3つのクラスを検出することができます。

  2. Potential deadlocks arising from lock ordering problems

  3. Data races -- accessing memory without adequate locking or synchronisation。これらのような

の問題は、多くの場合、再生不能、タイミング依存のクラッシュ、デッドロックやその他の不正行為の結果、および他の手段で見つけることが困難な場合があります。

Helgrindはすべてのpthread抽象を認識し、その効果を可能な限り正確に追跡します。 x86およびamd64プラットフォームでは、LOCK命令プレフィックスの使用に起因する暗黙ロックを理解し、部分的に処理します。

Helgrindは、アプリケーションでPOSIX pthreads APIのみを使用する場合に最適です。ただし、カスタムスレッドプリミティブを使用する場合は、helgrind.hで定義されたANNOTATE_ *マクロを使用して、Helgrindにその動作を記述することができます。この機能はValgrindのリリース3.5.0で追加され、実験的なものと見なされます。

関連する問題