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)
             
            
           
           | 管理独立线程 (类) |