std:: jthread
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Operations | ||||
| Stop token handling | ||||
| Non-member functions | ||||
|
定义于头文件
<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
(公开成员函数) |
|
|
返回底层实现定义的线程句柄
(公开成员函数) |
|
|
[static]
|
返回实现支持的并发线程数
(公开静态成员函数) |
操作 |
|
|
等待线程完成执行
(公开成员函数) |
|
|
允许线程独立于线程句柄执行
(公开成员函数) |
|
|
交换两个 jthread 对象
(公开成员函数) |
|
停止令牌处理 |
|
返回与线程共享停止状态关联的
stop_source
对象
(公开成员函数) |
|
返回与线程共享停止状态关联的
stop_token
(公开成员函数) |
|
|
通过线程的共享停止状态请求停止执行
(公开成员函数) |
|
非成员函数
|
(C++20)
|
特化
std::swap
算法
(函数) |
注释
| 功能测试 宏 | 值 | 标准 | 功能 |
|---|---|---|---|
__cpp_lib_jthread
|
201911L
|
(C++20) | 停止令牌 与 可汇合线程 |
参见
|
(C++11)
|
管理独立线程
(类) |