マルチスレッド化の基本概念

スレッド とは、プログラムからの実行を表すパスです。これは、1 つのプロセスにのみ属する実行エンティティーです。各プロセスには、そのプロセスが作成されたときに自動的に作成される実行スレッドが少なくとも 1 つあります。メインプログラムは最初のスレッドで実行されます。Windows* のスレッドは、スタック、CPU レジスターの状態、セキュリティー・コンテキスト、およびシステム・スケジューラーの実行リスト内の項目から構成されます。各スレッドはプロセスのすべてのリソースを共有します。

プロセス は、1 つ以上のスレッドと、メモリー内のプログラムのコード、データ、およびその他のリソースから構成されます。一般的なプログラムリソースには、開かれたファイル、セマフォー (スレッド間通信の方法の 1 つ)、および動的に割り当てられたメモリーなどがあります。プログラムは、システム・スケジューラーがスレッドの 1 つに実行の制御を与えたときに実行されます。スケジューラーは、どのスレッドをいつ実行するかを決定します。優先度の低いスレッドは、優先度の高いスレッドの作業が終了するまで待機しなければならない場合があります。マルチプロセッサー・マシンでは、スケジューラーは個々のスレッドを異なるプロセッサーに移動して、CPU 負荷のバランスを取ることができます。

スレッドは、プロセス全体よりもシステム・オーバーヘッドが小さく、作成も簡単なので、他の処理と同時に実行することができる時間のかかる処理またはリソースを大幅に消費する処理に有効です。スレッドは、バックグラウンド印刷、デバイスの入力監視、編集中のデータのバックアップなどの処理に使用することができます。

スレッド、プロセス、ファイル、および通信デバイスが開かれると、それらを作成した関数はハンドル を返します。各ハンドルには、プロセスのセキュリティー・クレデンシャルを検証するために使用されるアクセス制御リスト (ACL) が関連付けられています。プロセスおよびスレッドは、このセクションで説明している関数を使用して、ハンドルを継承するか、ハンドルを放棄することができます。オブジェクトおよびハンドルは、システムリソースへのアクセスを規制します。

1 つのプロセスにあるすべてのスレッドは、互いに独立して実行されます。相互通信を行えるように特殊な操作を行わない限り、各スレッドはプロセスにある他のスレッドの存在を全く意識せずに動作します。共通のリソースを共有するスレッドは、セマフォーやその他のスレッド間通信の方法を使用して、互いの作業を調整しなければなりません。スレッド間通信についての詳細は、「リソースの共有」を参照してください。