Namespaces
Variants

std:: stop_token

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
定義済みヘッダー <stop_token>
class stop_token ;
(C++20以降)

stop_token クラスは、関連付けられた std::stop_source オブジェクトに対して停止要求が行われたか、または行えるかどうかを確認する手段を提供します。これは本質的に関連付けられた停止状態に対するスレッドセーフな「ビュー」です。

stop_token は、 std::stop_callback のコンストラクタにも渡すことができ、その場合、 stop_token に関連付けられた std::stop_source に対して停止要求が行われたときにコールバックが呼び出されます。また、 stop_token は、 std::condition_variable_any の割り込み可能な待機関数に渡すことができ、停止要求があった場合に条件変数の待機を中断します。

目次

翻訳の説明: - 「Contents」→「目次」に翻訳 - C++関連の専門用語(Member alias templates、Member functions、Modifiers、Observers、Non-member functions、Notes、Example)は原文のまま保持 - HTMLタグ、属性、数値は一切変更せず - フォーマットと構造は完全に維持

メンバーエイリアステンプレート

定義
callback_type < Callback > (C++26以降) std:: stop_callback < Callback >

メンバー関数

新しい stop_token オブジェクトを構築する
(public member function)
stop_token オブジェクトを破棄する
(public member function)
stop_token オブジェクトを代入する
(public member function)
修飾子
2つの stop_token オブジェクトを交換する
(public member function)
オブザーバー
関連付けられた停止状態に対して停止要求が行われたかどうかをチェックする
(public member function)
関連付けられた停止状態に対して停止要求が可能かどうかをチェックする
(public member function)

非メンバー関数

(C++20)
二つの std::stop_token オブジェクトを比較する
(関数)
std::swap アルゴリズムを特殊化する
(関数)

注記

stop_token オブジェクトは通常、独立して構築されるのではなく、 std::jthread または std::stop_source から取得されます。これにより、 std::jthread または std::stop_source と同じ関連付けられた停止状態を共有します。

機能テスト マクロ 標準 機能
__cpp_lib_jthread 201911L (C++20) ストップトークン および ジョイニングスレッド

#include <iostream>
#include <thread>
using namespace std::literals::chrono_literals;
void f(int value)
{
    while (!stop_token.stop_requested())
    {
        std::cout << value++ << ' ' << std::flush;
        std::this_thread::sleep_for(200ms);
    }
    std::cout << std::endl;
}
int main()
{
    std::jthread thread(f, 5); // 約3秒間 5 6 7 8... を出力
    std::this_thread::sleep_for(3s);
    // jthreadのデストラクタはrequest_stop()とjoin()を呼び出す
}

出力例:

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19