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 的可中断等待函数,以便在请求停止时中断条件变量的等待。

目录

成员别名模板

类型 定义
callback_type < Callback > (自 C++26 起) std:: stop_callback < Callback >

成员函数

构造新的 stop_token 对象
(公开成员函数)
析构 stop_token 对象
(公开成员函数)
赋值 stop_token 对象
(公开成员函数)
修改器
交换两个 stop_token 对象
(公开成员函数)
观察器
检查关联的停止状态是否已被请求停止
(公开成员函数)
检查关联的停止状态是否可被请求停止
(公开成员函数)

非成员函数

(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(std::stop_token stop_token, 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