–r deadlock オプションを付けて collect コマンドを使用します。このオプションは、プログラムの実行中にデッドロック検出実験を作成します。
このチュートリアルの場合、次のコマンドを使用して、din_philo.1.er というデッドロック検出実験を作成します。
% collect -r deadlock -o din_philo.1.er din_philo
collect コマンドでは、デッドロック検出実験の作成時に役立つ次のコマンドが受け入れられます。
回復不可能なエラーが検出された場合は、プログラムを終了します。
回復不可能なエラーが検出された場合は、プログラムを終了してコアダンプを出力します。
回復不可能なエラーが検出された場合も、プログラムの続行を許可します。
デフォルトの動作は terminate です。
必要な動作を実行するために、collect コマンドで前述のいずれかのオプションを使用できます。たとえば、実デッドロックが発生した場合にプログラムを終了してコアダンプを出力するには、次の collect コマンドを使用します。
% collect -r deadlock,abort -o din_philo.1.er din_philo
実デッドロックが発生した場合にプログラムをハングアップさせるには、次の collect コマンドを使用します。
% collect -r deadlock,continue -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) のマニュアルページを参照してください。