次の方法で共有


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_argumentsystem_errorをスローします。

呼び出し元のオブジェクトに関連付けられているスレッドが無効な場合、関数はエラー コードがno_such_processsystem_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_againsystem_error オブジェクトをスローします。 F への呼び出しが、キャッチされない例外で終了する場合、terminate が呼び出されます。

3 番目のコンストラクターは、Other に関連付けられているスレッドに関連付けられているオブジェクトを構築します。 Other は既定で構築される状態に設定されます。

関連項目

ヘッダー ファイル リファレンス
<thread>