std::jthread

来自cppreference.com
< cpp‎ | thread
 
 
并发支持库
线程
(C++11)
jthread
(C++20)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中弃用)
(C++11)(C++20 中弃用)
原子操作的自由函数
原子标志的自由函数
内存序
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
闩与屏障
(C++20)
(C++20)
future
(C++11)
(C++11)
(C++11)
(C++11)
 
 
在标头 <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 将从其内部的 stop_source 传递它。这允许函数在其执行中检查是否已请求停止,而若已请求则返回。

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

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

成员类型

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

成员函数

创建新的 jthread 对象
(公开成员函数)
如果 joinable()true,那么调用 request_stop() 然后 join();不论如何都会销毁 jthread 对象。
(公开成员函数)
移动 jthread 对象
(公开成员函数)
观察器
检查线程是否可合并,即潜在地运行于平行环境中
(公开成员函数)
返回线程的 id
(公开成员函数)
返回底层实现定义的线程句柄
(公开成员函数)
返回实现支持的并发线程数
(公开静态成员函数)
操作
等待线程完成其执行
(公开成员函数)
容许线程从线程句柄独立开来执行
(公开成员函数)
交换两个 jthread 对象
(公开成员函数)
停止记号处理
返回与线程的停止状态关联的 stop_source 对象
(公开成员函数)
返回与线程的共享停止状态关联的 stop_token
(公开成员函数)
请求执行经由线程的共享停止状态停止
(公开成员函数)

非成员函数

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