JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: スレッドアナライザユーザーズガイド
search filter icon
search icon

ドキュメントの情報

はじめに

1.  スレッドアナライザとその機能について

2.  データの競合チュートリアル

3.  デッドロックのチュートリアル

3.1 デッドロックについて

3.2 デッドロックチュートリアルのソースファイルの入手

3.2.1 din_philo.c のソースコードリスト

3.3 食事する哲学者の問題

3.3.1 哲学者がデッドロックに陥るしくみ

3.3.2 哲学者 1 の休眠時間の導入

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

3.4.1 ソースコードをコンパイルする

3.4.2 デッドロック検出実験を作成する

3.4.3 デッドロック検出実験を検証する

3.4.3.1 スレッドアナライザを使用したデッドロック検出実験結果の表示

3.4.3.2 er_print を使用した、デッドロック検出実験結果の表示

3.5 デッドロックの実験結果について

3.5.1 デッドロックが発生した実行の検証

3.5.2 潜在的デッドロックがあるにもかかわらず完了した実行の検証

3.6 デッドロックの修正と誤検知について

3.6.1 トークンを使用した哲学者の規制

3.6.1.1 誤検知レポート

3.6.2 トークンの代替システム

A.  スレッドアナライザで認識される API

B.  役に立つヒント

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

スレッドアナライザを使用して、プログラム内の潜在的デッドロックおよび実デッドロックを確認できます。スレッドアナライザは、Oracle Solaris Studio パフォーマンスアナライザが使用するものと同じ「収集-分析」モデルに従います。

スレッドアナライザを使用するには、次の 3 つの手順を行います。

3.4.1 ソースコードをコンパイルする

コードをコンパイルし、必ず -g を指定します。高度な最適化では、行番号や呼び出しスタックなどの情報が間違って報告される場合があるので、高度な最適化は指定しないでください。-g -xopenmp=noopt を付けて OpenMP プログラムをコンパイルし、-g -mt だけを付けて POSIX スレッドプログラムをコンパイルします。

これらのオプションについては、cc(1)、CC(1)、または f95 (1) のマニュアルページを参照してください。

このチュートリアルの場合、次のコマンドを使用してコードをコンパイルします。

% cc -g -o din_philo din_philo.c

3.4.2 デッドロック検出実験を作成する

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

このチュートリアルの場合、次のコマンドを使用して、din_philo.1.er というデッドロック検出実験を作成します。

% collect -r deadlock -o din_philo.1.er din_philo

複数のデッドロック検出実験を作成することによって、デッドロックを検出する可能性を高められます。実験ごとに異なるスレッド数と異なる入力データを使用してください。たとえば、din_philo.c コードで、次の行の値を変更できます。

    13  #define PHILOS 5
    14  #define DELAY 5000
    15  #define FOOD 100

続いて、前述のようにコンパイルして、別の実験結果を収集できます。

詳しくは、collect(1) および collector(1) のマニュアルページを参照してください。

3.4.3 デッドロック検出実験を検証する

スレッドアナライザ、パフォーマンスアナライザ、er_print ユーティリティで、デッドロック検出実験を検証できます。スレッドアナライザおよびパフォーマンスアナライザはどちらも GUI インタフェースを表示します。スレッドアナライザはデフォルトの簡略セットのタブを表示しますが、それ以外はパフォーマンスアナライザと同じです。

3.4.3.1 スレッドアナライザを使用したデッドロック検出実験結果の表示

スレッドアナライザを開始して、din_philo.1.er 実験結果を開くには、次のコマンドを入力します。

% tha din_philo.1.er

スレッドアナライザは、メニューバー、ツールバー、および各種表示用のタブを含む分割区画で構成されます。

デッドロック検出用に収集された実験結果を開くと、デフォルトで、左側の区画に次のタブが表示されます。

スレッドアナライザ画面の右側区画に次のタブが表示されます。

3.4.3.2 er_print を使用した、デッドロック検出実験結果の表示

er_print ユーティリティは、コマンド行インタフェースを表示します。インタラクティブセッションで er_print ユーティリティを使用して、セッション中にサブコマンドを指定します。コマンド行オプションを使用して、インタラクティブでない方法でもサブコマンドを指定できます。

次のサブコマンドは、 er_print ユーティリティでデッドロックを調べるときに役立ちます。

詳細は、collect(1)、tha(1)、analyzer(1)、および er_print(1) のマニュアルページを参照してください。