Sun Studio 12: スレッドアナライザユーザーズガイド

3.3 スレッドアナライザを使用したデッドロックの検出方法

スレッドアナライザを使用して、プログラムに潜在的および実デッドロックがあるかどうかを検査できます。スレッドアナライザは、Sun Studio パフォーマンスアナライザが使用している「収集解析」モデルと同じモデルに従っています。スレッドアナライザの使用に必要な手順は、次の 3 つです。

3.3.1 ソースコードのコンパイル

必ず -g を指定してコードをコンパイルしてください。最適化レベルが高いと、行番号や呼び出すスタックなどの情報が誤って報告されることがあるため、最適化レベルを高くしないでください。OpenMP プログラムのコンパイルでは -g -xopenmp=noopt を使用し、 POSIX スレッドプログラムのコンパイルでは -g -mt のみを使用してください。

詳細は、cc.1CC.1、または f95.1 を参照してください。

3.3.2 デッドロック検出用実験の作成

-r deadlock オプションを付けて、スレッドアナライザの collect コマンドを使用してください。このオプションは、プログラムの実行中にデッドロック検出用実験を作成します。

デッドロック検出用実験をいくつか作成すると、デッドロックを検出できる可能性が大きくなります。実験ごとにスレッド数と入力データを変更してください。

詳細は、collect.1 および collector.1 を参照してください。

3.3.3 実験結果の検証

tha コマンド、analyzer コマンド、または er_print ユーティリティーを使用して、デッドロック検出実験を検証することができます。スレッドアナライザアナライザでは GUI インタフェースが使用でき、er_print ではコマンド行インタフェースを使用します。

詳細は、tha.1analyzer.1、および er_print.1 を参照してください。

3.3.3.1 スレッドアナライザインタフェース

スレッドアナライザ は、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されています。デフォルトでは、左側の区画に次の 3 つのタブが表示されます。

3.3.3.2 er_print インタフェース

左側の区画と異なり、右側の区画には「デッドロックの詳細」タブがあり、「デッドロック」タブで選択されたスレッドの詳細情報を表示します。er_print を使用してデッドロックを検証する際に特に有用なサブコマンドを次に示します。

詳細は、er_print.1 を参照してください。