このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。
Oracle Solaris Studioスレッド・アナライザはアプリケーションを最適化するための高度なツールで、マルチスレッド・アプリケーションの競合状態とデッドロックを検出および分析できるように設計されています。
データ競合は、誤った結果や想定外の結果を引き起こす可能性があるうえ、問題が発生しているように見える場所とはまったく異なる場所で発生する場合もあります。 データ競合は次の条件に該当する場合に発生します。
シングル・プロセスに含まれる2つ以上のスレッドが、同じメモリー位置に同時にアクセスする。
それらのスレッドのうち1つ以上が、そのメモリー位置に書込みアクセスをしている。
そのメモリーへのアクセスを制御するための排他ロックが、スレッドでは使用されていない。
デッドロック状態が発生するのは、1つ目のスレッドが2つ目のスレッドによって保留中のリソース待ち状態でブロックされ、2つ目のスレッドが1つ目のスレッドによって保留中のリソース待ち状態でブロックされている場合(または、3つ以上のスレッドが関わって同様の状況が発生している場合)です。
データ競合とデッドロックの問題を検出できるようにソース・コードをインスツルメント処理するには、最初に-xinstrument=dataraceフラグを付けてコードをコンパイルします。行番号およびコール・スタックに関する情報が正しく返されるようにするには、-gフラグも設定し、最適化レベルは指定しないようにすることをお薦めします。
その後で、生成されたアプリケーション・コードをcollect -r raceコマンドまたはcollect -r deadlockコマンドを使用して実行すると、プロセス実行時のデータ競合またはデッドロックの検出に関する実行時情報が収集されます。
$collect -r race
app
params
$collect -r deadlock
app
params
最後に、実行結果をスレッド・アナライザにロードし、データ競合またはデッドロック状態を特定します。