スレッドアナライザを使用して、プログラムに潜在的および実デッドロックがあるかどうかを検査できます。スレッドアナライザは、Sun Studio パフォーマンスアナライザが使用している「収集解析」モデルと同じモデルに従っています。スレッドアナライザの使用に必要な手順は、次の 3 つです。
ソースコードをコンパイルする。
デッドロック検出用実験を作成する。
実験結果を検証する。
必ず -g を指定してコードをコンパイルしてください。最適化レベルが高いと、行番号や呼び出すスタックなどの情報が誤って報告されることがあるため、最適化レベルを高くしないでください。OpenMP プログラムのコンパイルでは -g -xopenmp=noopt を使用し、 POSIX スレッドプログラムのコンパイルでは -g -mt のみを使用してください。
詳細は、cc.1、CC.1、または f95.1 を参照してください。
-r deadlock オプションを付けて、スレッドアナライザの collect コマンドを使用してください。このオプションは、プログラムの実行中にデッドロック検出用実験を作成します。
デッドロック検出用実験をいくつか作成すると、デッドロックを検出できる可能性が大きくなります。実験ごとにスレッド数と入力データを変更してください。
詳細は、collect.1 および collector.1 を参照してください。
tha コマンド、analyzer コマンド、または er_print ユーティリティーを使用して、デッドロック検出実験を検証することができます。スレッドアナライザ
とアナライザ
では GUI インタフェースが使用でき、er_print
ではコマンド行インタフェースを使用します。
詳細は、tha.1、analyzer.1、および er_print.1 を参照してください。
スレッドアナライザ は、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されています。デフォルトでは、左側の区画に次の 3 つのタブが表示されます。
「デッドロック」タブ
スレッドアナライザがプログラム内で検出した潜在的および実デッドロックの一覧を表示します。デフォルトでは、このタブが選択されています。デッドロックごとに関係するスレッドが表示されます。これらスレッドは、1 つのスレッドがロックを保持するとともに、同じチェーン内の次のスレッドが保持する別のロックを要求する循環チェーンを形成しています。
「デュアルソース」タブ
循環チェーン内のスレッドを選択し、「デュアルソース」タブをクリックします。「デュアルソース」タブに、そのスレッドがロックを保持したソース位置と、ロックを要求したソース位置の両方が示されます。スレッドがロックを保持または要求したソース行は強調表示されます。
「実験」タブ
実験の負荷オブジェクトを示すとともに、エラーおよび警告メッセージを表示します。スレッドアナライザの右側の区画には、次の 2 つのタブが表示されます。
「概要」タブ - 「デッドロック」タブで選択されたデッドロックの概要情報を表示します。
「デッドロックの詳細」タブ - 「デッドロック」タブで選択されたデッドロックの詳細情報を表示します。
er_print
インタフェース左側の区画と異なり、右側の区画には「デッドロックの詳細」タブがあり、「デッドロック」タブで選択されたスレッドの詳細情報を表示します。er_print
を使用してデッドロックを検証する際に特に有用なサブコマンドを次に示します。
-deadlocks
実験で検出された潜在的および実デッドロックをすべて報告します。
-ddetail deadlock_id
deadlock_id に指定されたデッドロックの詳細情報を返します。deadlock_id に all を指定すると、er_print
はすべてのデッドロックの詳細情報を表示します。
-header
実験に関する説明を表示し、エラーと警告を報告します。
詳細は、er_print.1 を参照してください。