thread
クラス
アプリケーション内の実行スレッドを観察および管理するために使用するオブジェクトを定義します。
構文
class thread;
解説
アプリケーション内の実行スレッドを観察および管理するために thread
オブジェクトを使用できます。 既定のコンストラクターを使用して作成された thread
オブジェクトは、実行スレッドに関連付けられていません。 呼び出し可能オブジェクトを使用して構築された thread
オブジェクトは、新しい実行スレッドを作成し、その thread
で呼び出し可能オブジェクトを呼び出します。 Thread
オブジェクトは移動できますが、コピーすることはできません。そのため、1 つの実行スレッドを 1 つの thread
オブジェクトにのみ関連付けることができます。
すべての実行スレッドに thread::id
型の一意の識別子があります。 関数 this_thread::get_id
は呼び出しスレッドの識別子を返します。 メンバー関数 thread::get_id
は、thread
オブジェクトによって管理されるスレッドの識別子を返します。 既定で構築される thread
オブジェクトの場合、thread::get_id
メソッドは、呼び出し時に結合できる実行スレッドに対して、既定で構築される thread
オブジェクトすべてで同じで、this_thread::get_id
によって返される値とは異なる値を持つオブジェクトを返します。
メンバー
パブリック クラス
名前 | 説明 |
---|---|
id |
関連するスレッドを一意に識別します。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
thread |
thread オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
detach |
thread オブジェクトから関連するスレッドをデタッチします。 |
get_id |
関連付けられたスレッドの一意の識別子を返します。 |
hardware_concurrency |
静的。 ハードウェア スレッド コンテキストの数の見積もりを返します。 |
join |
関連のスレッドが完了するまでブロックします。 |
joinable |
関連付けられたスレッドが結合可能かどうかを指定します。 |
native_handle |
スレッド ハンドルを表す実装固有の型を返します。 |
swap |
オブジェクトの状態を指定した thread オブジェクトと交換します。 |
パブリック演算子
名前 | 説明 |
---|---|
thread::operator= |
スレッドを現在の thread オブジェクトと関連付けます。 |
要件
ヘッダー: <thread>
名前空間: std
detach
関連するスレッドをデタッチします。 オペレーティング システムは、終了時にスレッド リソースを解放することが必要になります。
void detach();
解説
detach
を呼び出した後、後続の get_id
呼び出しによって id
が返されます。
呼び出し元のオブジェクトに関連付けられているスレッドが結合できない場合、関数はエラー コードがinvalid_argument
system_error
をスローします。
呼び出し元のオブジェクトに関連付けられているスレッドが無効な場合、関数はエラー コードがno_such_process
system_error
をスローします。
get_id
関連付けられたスレッドの一意の識別子を返します。
id get_id() const noexcept;
戻り値
関連付けられたスレッドを一意に識別する id
オブジェクト。または、スレッドがオブジェクトに関連付けられていない場合に id()
。
hardware_concurrency
ハードウェア スレッド コンテキストの数の見積もりを返す静的メソッド。
static unsigned int hardware_concurrency() noexcept;
戻り値
ハードウェア スレッド コンテキストの数の見積もり。 値を計算できない場合、または適切に定義されていない場合、このメソッドは 0 を返します。
Microsoft 固有の仕様
hardware_concurrency
は、同時に実行できるハードウェア スレッドの数に対応する論理プロセッサの数を返します。 この計算には、物理プロセッサの数、各物理プロセッサのコア数、各シングル コアでの同時マルチスレッドが含まれます。
Windows 11 および Windows Server 2022 より前では、アプリケーションは既定で 1 つのプロセッサ グループに制限されていました。論理プロセッサは最大 64 個でした。 これにより、同時に実行されるスレッドの数が 64 に制限されます。 詳細については、「 Processor グループ」を参照してください。
Windows 11 および Windows Server 2022 以降では、プロセスとそのスレッドにはプロセッサ アフィニティがあり、既定では、システム内のすべてのプロセッサと、64 を超えるプロセッサを持つマシン上の複数のグループにまたがっています。 同時実行スレッドの数の制限は、システム内の論理プロセッサの合計数になりました。
id
クラス
プロセス内の各実行スレッドの一意の識別子を提供します。
class thread::id {
id() noexcept;
};
解説
既定のコンストラクターは、既存のスレッドのオブジェクトについて、thread::id
オブジェクトに等しいオブジェクトを作成しません。
既定で構築される thread::id
オブジェクトは等しいものになります。
join
呼び出し元オブジェクトに関連付けられている実行スレッドが完了するまでブロックします。
void join();
解説
呼び出しが成功すると、呼び出し元のオブジェクトの後続の get_id
呼び出しは、既存のどのスレッドの thread::id
にも等しくない既定の thread::id
を返します。呼び出しが成功しなかった場合、get_id
によって返される値は変更されません。
joinable
関連付けられたスレッドが結合可能かどうかを指定します。
bool joinable() const noexcept;
戻り値
関連付けられたスレッドが結合可能な場合は true
、それ以外の場合は false
。
解説
スレッド オブジェクトは、 get_id() != id()
場合は参加可能です。
native_handle
スレッド ハンドルを表す実装固有の型を返します。 スレッド ハンドルは、実装固有の方法で使用できます。
native_handle_type native_handle();
戻り値
native_handle_type
は、Win32 HANDLE
キャストとして void *
として定義されます。
thread::operator=
指定したオブジェクトのスレッドを現在のオブジェクトに関連付けます。
thread& operator=(thread&& Other) noexcept;
パラメーター
Other
thread
オブジェクト。
戻り値
*this
解説
メソッドは、呼び出し元のオブジェクトが結合可能である場合、デタッチを呼び出します。
関連付けが行われると、Other
が既定で構築される状態に設定されます。
swap
オブジェクトの状態を、指定された thread
オブジェクトの状態と交換します。
void swap(thread& Other) noexcept;
パラメーター
Other
thread
オブジェクト。
thread
コンストラクター
thread
オブジェクトを構築します。
thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);
thread(thread&& Other) noexcept;
パラメーター
F
スレッドで実行するアプリケーション定義関数。
A
F
に渡す引数のリスト。
Other
既存の thread
オブジェクトです。
解説
最初のコンストラクターは、実行スレッドに関連付けられていないオブジェクトを構築します。 構築されたオブジェクトの get_id
によって返される値は thread::id()
。
2 番目のコンストラクターは、新しい実行スレッドに関連付けられているオブジェクトを構築します。 <functional>
で定義された擬似関数INVOKE
を実行します。 新しいスレッドを開始するのに十分なリソースがない場合、この関数は、エラー コード resource_unavailable_try_again
で system_error
オブジェクトをスローします。 F
への呼び出しが、キャッチされない例外で終了する場合、terminate
が呼び出されます。
3 番目のコンストラクターは、Other
に関連付けられているスレッドに関連付けられているオブジェクトを構築します。 Other
は既定で構築される状態に設定されます。