Namespaces
Variants

std:: jthread

From cppreference.net
Concurrency support library
Threads
(C++11)
jthread
(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
定义于头文件 <thread>
class jthread ;
(C++20 起)

jthread 表示 单个执行线程 。其通用行为与 std::thread 相同,不同之处在于 jthread 在析构时会自动重新连接,并且可在特定情况下被取消/停止。

线程在关联的线程对象构造完成时立即开始执行(受操作系统调度延迟影响),从作为 构造函数参数 提供的顶层函数开始运行。顶层函数的返回值会被忽略,若其因抛出异常而终止,则会调用 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 之后)。

任意两个 std::jthread 对象均不能表示同一执行线程; std::jthread 不满足 可复制构造 可复制赋值 要求,但满足 可移动构造 可移动赋值 要求。

目录

成员类型

成员类型 定义
id std::thread::id
native_handle_type ( 可选* ) std::thread::native_handle_type

成员函数

构造新的 jthread 对象
(公开成员函数)
若线程可汇合,则请求停止并汇合该线程
(公开成员函数)
移动 jthread 对象
(公开成员函数)
观察器
检查线程是否可汇合,即是否可能在并行上下文中运行
(公开成员函数)
返回线程的 id
(公开成员函数)
返回底层实现定义的线程句柄
(公开成员函数)
返回实现支持的并发线程数
(公开静态成员函数)
操作
等待线程完成执行
(公开成员函数)
允许线程独立于线程句柄执行
(公开成员函数)
交换两个 jthread 对象
(公开成员函数)
停止令牌处理
返回与线程共享停止状态关联的 stop_source 对象
(公开成员函数)
返回与线程共享停止状态关联的 stop_token
(公开成员函数)
通过线程的共享停止状态请求停止执行
(公开成员函数)

非成员函数

特化 std::swap 算法
(函数)

注释

功能测试 标准 功能
__cpp_lib_jthread 201911L (C++20) 停止令牌 可汇合线程

参见

(C++11)
管理独立线程
(类)