std::jthread
来自 cppreference.cn
定义于头文件 <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
不可CopyConstructible或CopyAssignable,尽管它是MoveConstructible和MoveAssignable。
目录 |
[编辑] 成员类型
成员类型 | 定义 |
id
|
std::thread::id |
native_handle_type (可选*) |
std::thread::native_handle_type |
[编辑] 成员函数
构造新的 jthread 对象(公共成员函数) | |
如果线程可连接,则请求停止并连接线程 (公共成员函数) | |
移动 jthread 对象(公共成员函数) | |
观察器 | |
检查线程是否可join,即是否可能在并行上下文中运行 (公共成员函数) | |
返回线程的 id (公共成员函数) | |
返回底层实现定义的线程句柄 (公共成员函数) | |
返回实现支持的并发线程数 (公共静态成员函数) | |
操作 | |
等待线程完成其执行 (公共成员函数) | |
允许线程独立于线程句柄执行 (公共成员函数) | |
交换两个 jthread 对象 (公共成员函数) | |
Stop token handling | |
返回与线程共享停止状态关联的 stop_source 对象(公共成员函数) | |
返回与线程共享停止状态关联的 stop_token (公共成员函数) | |
通过线程的共享停止状态请求停止执行 (公共成员函数) |
[编辑] 非成员函数
(C++20) |
特化 std::swap 算法 (函数) |
[编辑] 注释
特性测试宏 | 值 | 标准 | 特性 |
---|---|---|---|
__cpp_lib_jthread |
201911L |
(C++20) | 停止令牌和连接线程 |
[编辑] 另请参阅
(C++11) |
管理一个独立的线程 (类) |