std::jthread
| ヘッダ <thread> で定義 |
||
| class jthread; |
(C++20以降) | |
クラス jthread は、単一の実行スレッドを表します。これは std::thread と同じ一般的な振る舞いをしますが、jthread は破棄時に自動的に再合流 (rejoin) し、特定の状況でキャンセル/停止できる点が異なります。
スレッドは、関連付けられたスレッドオブジェクトの構築時に即座に実行を開始し(OSのスケジューリングによる遅延は除く)、コンストラクタ引数として提供されたトップレベル関数から開始します。トップレベル関数の戻り値は無視され、もし例外を投げて終了した場合は std::terminate が呼び出されます。トップレベル関数は、std::promise を介して、あるいは共有変数を変更することによって(これには同期が必要になる場合があり、std::mutex や std::atomic を参照)、その戻り値や例外を呼び出し元に伝えることができます。
std::thread とは異なり、jthread は論理的に std::stop_source 型の内部プライベートメンバを保持し、これが共有停止状態を維持します。jthread のコンストラクタは、最初の引数として std::stop_token を取る関数を受け入れます。このトークンは、jthread がその内部の std::stop_source から渡します。これにより、関数は実行中に停止が要求されたかどうかをチェックし、要求されていればリターンすることができます。
std::jthread オブジェクトはまた、どのスレッドも表さない状態になることもあります(デフォルト構築後、ムーブ元、detach、または join の後)。また、実行スレッドがいかなる jthread オブジェクトとも関連付けられないこともあります(detach の後)。
2つの std::jthread オブジェクトが同じ実行スレッドを表すことはありません。std::jthread はコピー構築可能 (CopyConstructible)でもコピー代入可能 (CopyAssignable)でもありませんが、ムーブ構築可能 (MoveConstructible)かつムーブ代入可能 (MoveAssignable)です。
目次 |
[編集] メンバ型
| メンバ型 | 定義 |
id
|
std::thread::id |
native_handle_type (任意*) |
std::thread::native_handle_type |
[編集] メンバ関数
新しい jthread オブジェクトを構築する(public member function) | |
| スレッドが合流可能 (joinable) であれば、停止を要求してからスレッドに合流する (public member function) | |
jthread オブジェクトをムーブする(public member function) | |
監視 | |
| スレッドが join 可能か、すなわち並行コンテキストで実行されている可能性があるかをチェックする (public member function) | |
| スレッドのIDを返す (public member function) | |
| 実装定義の内部スレッドハンドルを返す (public member function) | |
| [static] |
実装がサポートする並行スレッド数を返す (public static member function) |
操作 | |
| スレッドが実行を完了するまで待機する (public member function) | |
| スレッドがスレッドハンドルから独立して実行を継続できるようにする (public member function) | |
| 2つの jthread オブジェクトを交換する (public member function) | |
停止トークンのハンドリング | |
スレッドの共有停止状態に関連付けられた stop_source オブジェクトを返す(public member function) | |
スレッドの共有停止状態に関連付けられた stop_token を返す(public member function) | |
| スレッドの共有停止状態を介して実行停止を要求する (public member function) | |
[編集] 非メンバ関数
| (C++20) |
std::swap アルゴリズムを特殊化する (function) |
[編集] ノート
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_jthread |
201911L |
(C++20) | 停止トークン (Stop token) と 合流スレッド (joining thread) |
[編集] 関連項目
| (C++11) |
個別のスレッドを管理する (class) |