名前空間
変種
操作

std::jthread

提供: cppreference.com
< cpp‎ | thread
 
 
スレッドサポートライブラリ
スレッド
(C++11)
jthread
(C++20)
(C++20)
this_thread 名前空間
(C++11)
(C++11)
(C++11)
相互排他
(C++11)
汎用ロック管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件変数
(C++11)
セマフォ
ラッチとバリア
(C++20)
(C++20)
フューチャー
(C++11)
(C++11)
(C++11)
(C++11)
 
 
ヘッダ <thread> で定義
class jthread;
(C++20以上)

クラス jthread実行のスレッドを表します。 一般的な動作はstd::thread と同じですが、破棄時に自動的に再合流することと、特定の状況でキャンセル/停止できることが異なります。

スレッドオブジェクトが構築されるとすぐに (OS のスケジューリング遅延はありますが) 紐付けられたスレッドの実行が開始され、コンストラクタの引数として提供されたトップレベル関数が起動されます。 このトップレベル関数は戻り値が無視され、例外を投げて終了した場合は std::terminate が呼ばれます。 戻り値や例外は std::promise を通したり共有している変数を変更することによって呼び出し元に伝えることができます (同期が必要な場合もあります。 std::mutex および std::atomic を参照してください)。

std::thread と異なり、 jthread のコンストラクタは第1引数として std::stop_token を取る関数も受理します。 これにより実行中に停止が要求されたかどうか調べたり、その場合に終了したりできるようになります。

std::jthread オブジェクトは何のスレッドも表していない状態になることもあります (デフォルト構築後、ムーブ後、 detach 後または join 後)。 また、実行のスレッドがいずれの jthread オブジェクトとも紐付けられていない場合もあります (detach 後)。

2つの std::jthread オブジェクトが同じ実行のスレッドを表すことはありません。 std::jthreadMoveConstructible かつ MoveAssignable ですが、 CopyConstructible でも CopyAssignable でもありません。

目次

[編集] メンバ型

メンバ型 定義
id std::thread::id
native_handle_type std::thread::native_handle_type

[編集] メンバ関数

新しい jthread オブジェクトを構築します
(パブリックメンバ関数) [edit]
jthread オブジェクトを破棄します。 joinable() が true の場合はその前に request_stop() と join() を呼びます
(パブリックメンバ関数) [edit]
jthread オブジェクトをムーブします
(パブリックメンバ関数) [edit]
観察
スレッドが合流可能かどうか、すなわち並列文脈で潜在的に実行中かどうか、調べます
(パブリックメンバ関数) [edit]
スレッドの id を返します
(パブリックメンバ関数) [edit]
ベースとなる処理系定義のスレッドハンドルを返します
(パブリックメンバ関数) [edit]
処理系がサポートする並行スレッド数を返します
(パブリック静的メンバ関数) [edit]
操作
スレッドの実行終了を待ちます
(パブリックメンバ関数) [edit]
スレッドをスレッドオブジェクトから独立して実行できるようにします
(パブリックメンバ関数) [edit]
2つの jthread オブジェクトを入れ替えます
(パブリックメンバ関数) [edit]
ストップトークンの処理
スレッドの共有された停止状態に紐付く stop_source オブジェクトを返します
(パブリックメンバ関数) [edit]
スレッドの共有された停止状態に紐付く stop_token を返します
(パブリックメンバ関数) [edit]
スレッドの共有された停止状態を介して実行停止を要求します
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

std::swap アルゴリズムの特殊化
(関数テンプレート) [edit]