std::jthread

来自cppreference.com
< 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++20)
(C++20)
未来体
(C++11)
(C++11)
(C++11)
安全回收
风险指针
原子类型
(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::threadjthread 逻辑上保有一个内部的 std::stop_source 类型私有成员,它维持共享的停止状态。jthread 的构造函数接受一个以 std::stop_token 为其首个实参的函数,jthread 将从其内部的 std::stop_source 传递它。这允许函数在其执行中检查是否已请求停止,而若已请求则返回。

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

两个 std::jthread 对象不可以表示同一执行线程;std::jthread可复制构造(CopyConstructible) 可复制赋值(CopyAssignable) ,尽管它为可移动构造(MoveConstructible) 可移动赋值(MoveAssignable)

目录

[编辑]成员类型

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

[编辑]成员函数

创建新的 jthread 对象
(公开成员函数)[编辑]
如果线程可合并,那么请求停止然后合并此线程。
(公开成员函数)[编辑]
移动 jthread 对象
(公开成员函数)[编辑]
观察器
检查线程是否可合并,即潜在运行于并行上下文之中
(公开成员函数)[编辑]
返回线程的 id
(公开成员函数)[编辑]
返回底层的实现定义的线程句柄
(公开成员函数)[编辑]
返回实现支持的并发线程数
(公开静态成员函数)[编辑]
操作
等待线程完成其执行
(公开成员函数)[编辑]
容许线程从线程句柄独立开来执行
(公开成员函数)[编辑]
交换两个 jthread 对象
(公开成员函数)[编辑]
停止记号处理
返回与线程的共享停止状态关联的 stop_source 对象
(公开成员函数)[编辑]
返回与线程的共享停止状态关联的 stop_token
(公开成员函数)[编辑]
经由线程的共享停止状态请求执行停止
(公开成员函数)[编辑]

[编辑]非成员函数

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

[编辑]注解

功能特性测试标准功能特性
__cpp_lib_jthread201911L(C++20)停止令牌合并线程

[编辑]参阅

(C++11)
管理单独的线程
(类)[编辑]
close