命名空间
变体
操作

std::jthread

来自 cppreference.cn
< cpp‎ | thread
 
 
并发支持库
线程
(C++11)
jthread
(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++20)
(C++20)
期值
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存排序
(C++11)(C++26 中已弃用)
原子操作的自由函数
原子标志的自由函数
 
 
定义于头文件 <thread>
class jthread;
(C++20 起)

jthread 类表示一个独立的执行线程。它与std::thread具有相同的通用行为,除了jthread在析构时会自动加入,并且可以在某些情况下被取消/停止。

线程在关联的线程对象构造后(等待任何操作系统调度延迟)立即开始执行,从作为构造函数参数提供的顶层函数开始。顶层函数的返回值被忽略,如果它通过抛出异常终止,则调用std::terminate。顶层函数可以通过std::promise或修改共享变量(可能需要同步,请参阅std::mutexstd::atomic)将其返回值或异常传递给调用者。

std::thread不同,jthread 逻辑上持有一个类型为 std::stop_source 的内部私有成员,它维护一个共享的停止状态。jthread 构造函数接受一个函数,该函数将std::stop_token作为其第一个参数,该参数将由jthread从其内部std::stop_source传递。这允许函数在执行期间检查是否已请求停止,并在已停止的情况下返回。

std::jthread 对象也可能处于不表示任何线程的状态(在默认构造、移动、detachjoin之后),并且执行线程可能不与任何jthread对象关联(在detach之后)。

没有两个 std::jthread 对象可以表示相同的执行线程;std::jthread 不可CopyConstructibleCopyAssignable,尽管它是MoveConstructibleMoveAssignable

目录

[编辑] 成员类型

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

[编辑] 成员函数

构造新的 jthread 对象
(公共成员函数) [编辑]
如果线程可连接,则请求停止并连接线程
(公共成员函数) [编辑]
移动 jthread 对象
(公共成员函数) [编辑]
观察器
检查线程是否可join,即是否可能在并行上下文中运行
(公共成员函数) [编辑]
返回线程的 id
(公共成员函数) [编辑]
返回底层实现定义的线程句柄
(公共成员函数) [编辑]
返回实现支持的并发线程数
(公共静态成员函数) [编辑]
操作
等待线程完成其执行
(公共成员函数) [编辑]
允许线程独立于线程句柄执行
(公共成员函数) [编辑]
交换两个 jthread 对象
(公共成员函数) [编辑]
Stop token handling
返回与线程共享停止状态关联的 stop_source 对象
(公共成员函数) [编辑]
返回与线程共享停止状态关联的 stop_token
(公共成员函数) [编辑]
通过线程的共享停止状态请求停止执行
(公共成员函数) [编辑]

[编辑] 非成员函数

特化 std::swap 算法
(函数) [编辑]

[编辑] 注释

特性测试 标准 特性
__cpp_lib_jthread 201911L (C++20) 停止令牌连接线程

[编辑] 另请参阅

(C++11)
管理一个独立的线程
(类) [编辑]