この演習を開始する前に、『演習 1.2: スレッド・データの収集』を完了する必要があります。
スレッド・ビューでは、アプリケーション内のすべてのスレッドの状況が表示され、スレッドのデッド ロックと競合が明示されます。
ボトルネックを検出するには、以下のようにします。
スレッド間の垂直方向の矢印に注目してください。 片方向の矢印は、一方のスレッド (矢印の起点となっているスレッド) が、他方のスレッド (矢印が指してい るスレッド) によるロックの解除を待っていることを示しています。 両方向の矢印は、2 つのスレッドが両方ともお互いのロックが解除されるのを待つことにより、 デッドロック状態に陥っていることを示しています。
プログラムの開始後まもなくして、4 つの philo* スレッドが連続的に作成されます。 各スレッドは、しばらく実行されてからロックを要求します。 これらの要求は成功しません。 1 つ目から 3 つ目のロック要求が失敗したときに、これらのスレッドは Waiting for Lock 状態 に移行します。 4 つ目のスレッドのロック要求が失敗したときに、デッドロックが発生して、画面では 4 つすべてのスレッド が Deadlocked 状態になったことが示されます。
それぞれの philo* スレッドは他の philo* スレッドからのロックを待っており、
これら他の philo* スレッドもロックを待っています。
このような場合はデッドロックが発生しています。つまり、プログラムは袋小路に入ったような状態
になり、処理を継続できません。
注: 特定のスレッド・セグメント上でカーソルを停止すると、ロック要求、デッドロック、
および他の状態に関する具体的な情報を表示できます。
これによりツールチップが表示されて、例えば、ロックの名前が明示され、そのロックを保持し
ているスレッド (ロック元スレッド : Locking Thread) が特定できます。
このデッドロックが発生する理由を理解できたら、『演習 1.4: スレッド・ボ トルネックの解決』を開始する準備ができました。