std::jthread
| ヘッダ <thread> で定義
|
||
class jthread; |
(C++20以上) | |
クラス jthread はスレッドを表します。 一般的な動作はstd::thread と同じですが、破棄時に自動的に再合流することと、特定の状況でキャンセル/停止できることが異なります。
スレッドオブジェクトが構築されるとすぐに (OS のスケジューリング遅延はありますが) 紐付けられたスレッドの実行が開始され、コンストラクタの引数として提供されたトップレベル関数が起動されます。 このトップレベル関数は戻り値が無視され、例外を投げて終了した場合は std::terminate が呼ばれます。 戻り値や例外は std::promise を通したり共有している変数を変更することによって呼び出し元に伝えることができます (同期が必要な場合もあります。 std::mutex および std::atomic を参照してください)。
std::thread と異なり、 jthread は共有された停止状態を管理する std::stop_source 型のプライベートメンバを内部的に保持します。 jthread のコンストラクタは第1引数として std::stop_token を取る関数を受理します。 この std::stop_token は jthread によって前述の内部的な stop_source から渡されます。 これにより実行中の停止が要求されたかどうか調べたり、その場合に終了したりできるようになります。
std::jthread オブジェクトは何のスレッドも表していない状態になることもあります (デフォルト構築後、ムーブ後、 detach 後または join 後)。 また、実行のスレッドがいずれの jthread オブジェクトとも紐付けられていない場合もあります (detach 後)。
2つの std::jthread オブジェクトが同じ実行のスレッドを表すことはありません。 std::jthread は MoveConstructible かつ MoveAssignable ですが、 CopyConstructible でも CopyAssignable でもありません。
メンバ型
| メンバ型 | 定義 |
id
|
std::thread::id |
native_handle_type(オプション)
|
std::thread::native_handle_type |
メンバ関数
| 新しい jthread オブジェクトを構築します (パブリックメンバ関数) | |
| jthread オブジェクトを破棄します。 joinable() が true の場合はその前に request_stop() と join() を呼びます (パブリックメンバ関数) | |
| jthread オブジェクトをムーブします (パブリックメンバ関数) | |
観察 | |
| スレッドが合流可能かどうか、すなわち潜在的に並列文脈で実行中かどうか調べます (パブリックメンバ関数) | |
| スレッドの id を返します (パブリックメンバ関数) | |
| ベースとなる処理系定義のスレッドハンドルを返します (パブリックメンバ関数) | |
| 処理系がサポートしている並行スレッド数を返します (パブリック静的メンバ関数) | |
操作 | |
| スレッドの実行終了を待ちます (パブリックメンバ関数) | |
| スレッドを jthread オブジェクトから独立して実行できるようにします (パブリックメンバ関数) | |
| 2つの jthread オブジェクトを入れ替えます (パブリックメンバ関数) | |
ストップトークンの処理 | |
| スレッドの共有された停止状態に紐付く stop_source オブジェクトを返します (パブリックメンバ関数) | |
| スレッドの共有された停止状態に紐付く stop_token を返します (パブリックメンバ関数) | |
| スレッドの共有された停止状態を介して実行停止を要求します (パブリックメンバ関数) | |
非メンバ関数
(C++20) |
std::swap アルゴリズムの特殊化 (関数テンプレート) |