スレッドとプロセス

更新 : 2007 年 11 月

スレッドとプロセスは、コンピュータ科学における関連概念です。いずれも特定の順序で実行する必要がある命令のシーケンスを表します。ただし、別個のスレッドやプロセスの命令は並列実行できます。

プロセスは、オペレーティング システム内に存在するものであり、ユーザーがプログラムやアプリケーションとして認識するものに相当します。一方、スレッドはプロセス内に存在します。このため、スレッドは、軽量プロセスと呼ばれることもあります。各プロセスは、1 つ以上のスレッドで構成されます。

複数のプロセスが存在すると、コンピュータは、同時に複数のタスクを実行できます。複数のスレッドが存在すると、プロセスで作業を分割して並列実行できます。マルチプロセッサを搭載したコンピュータでは、プロセスやスレッドを各プロセッサに振り分けて実行できます。これにより、真の並列処理が実現されます。

完全な並列処理は、常に実現できるとは限りません。スレッドの同期が必要になることがあります。スレッドは、別のスレッドが結果を生成するまで待機したり、別のスレッドが使用しているリソースに排他的にアクセスしたりすることが必要な場合があります。同期に関する問題は、マルチスレッド アプリケーションで発生するバグの一般的な原因です。また、スレッドは、決して利用可能にならないリソースを待機することがあります。その結果、デッドロックと呼ばれる状態が生じることがあります。

Visual Studio デバッガは、強力で使いやすい、スレッドとプロセスのデバッグ用ツールを提供します。

Visual Studio のスレッドおよびプロセスのデバッグ用ツール

Visual Studio でのプロセスのデバッグで使用する主要なツールは、[プロセスにアタッチ] ダイアログ ボックス、[プロセス] ウィンドウ、および [デバッグの場所] ツール バーです。スレッドのデバッグで使用する主なツールは、[スレッド] ウィンドウ、ソース ウィンドウのスレッド マーカー、および [デバッグの場所] ツール バーです。

各ツールで提供される情報と実行できる操作を次の表に示します。

ユーザー インターフェイス

提供される情報

実行できる操作

[プロセスにアタッチ] ダイアログ ボックス

アタッチが可能なプロセス

  • プロセス名 (.exe)

  • プロセス ID 番号

  • メニュー バーのタイトル

  • 種類 (マネージ、x86、x64、IA64)

  • ユーザー名 (アカウント名)

  • セッション番号

アタッチ先のプロセスの選択。

リモート コンピュータの選択。

リモート コンピュータに接続するためのトランスポートの種類の変更。

[プロセス] ウィンドウ

アタッチされたプロセス

  • プロセス名

  • プロセス ID 番号

  • .exe を処理するパス

  • メニュー バーのタイトル

  • 状態 (中断、実行中)

  • デバッグ (ネイティブ、マネージなど)

  • トラスポートの種類 (既定、認証なしのネイティブ、スマート デバイス)

  • トラスポートの修飾子 (リモート コンピュータ)

ツールでの操作 :

  • アタッチ

  • デタッチ

  • 終了

ショートカット メニューでの操作 :

  • アタッチ

  • デタッチ

  • デバッグ停止時のデタッチ

  • 終了

[スレッド] ウィンドウ

現在のプロセス内のスレッド

  • スレッド ID

  • カテゴリ (メイン スレッド、インターフェイス スレッド、リモート プロシージャ コール ハンドラ、またはワーカー スレッド)

  • スレッド名

  • スレッドが作成された場所

  • 優先順位

  • 中断レベル

ショートカット メニューでの操作 :

  • スレッドに切り替え

  • 実行中のスレッドの凍結

  • 凍結されたスレッドの凍結解除

  • 注目するスレッドへのフラグの設定

  • スレッドのフラグの解除

  • スレッド名の変更

  • スレッドの表示と非表示

その他の操作 :

  • スレッドの呼び出し履歴のデータヒントでの表示

ソース ウィンドウ

スレッドが 1 つか複数かを示す、左端余白のスレッド インジケータ

ショートカット メニューでの操作 :

  • スレッドに切り替え

  • 注目するスレッドへのフラグの設定

  • スレッドのフラグの解除

[デバッグの場所] ツール バー

  • 現在のプロセス

  • 現在のスレッド

  • 現在のスタック フレーム

  • 別のプロセスへの切り替え

  • 現在のプロセス内の別なスレッドへの切り替え

  • 現在のスレッド内の別なスタック フレームへの切り替え

  • 現在のスレッドに対するフラグの設定または設定解除

  • フラグが設定されたスレッドのみの表示

参照

処理手順

方法 : [プロセス] ウィンドウを使用する

その他の技術情報

実行中のプロセスへのアタッチ

マルチスレッド アプリケーションのデバッグ