std::jthread::join
来自cppreference.com
void join(); | (C++20 起) | |
阻塞当前线程直至 *this 所标识的线程结束其执行。
*this 所标识的线程的完成同步于对应的从 join()
成功返回。
*this 自身上不进行同步。同时从多个线程在同一 jthread
对象上调用 join() 构成数据竞争,导致未定义行为。
目录 |
[编辑]参数
(无)
[编辑]返回值
(无)
[编辑]后条件
joinable() 为 false。
[编辑]异常
若出现错误则为 std::system_error。
[编辑]错误条件
- 若 this->get_id()==std::this_thread::get_id()(检测到死锁)则为 resource_deadlock_would_occur。
- 若线程非法则为 no_such_process。
- 若 joinable() 为 false 则为 invalid_argument。
[编辑]示例
运行此代码
#include <chrono>#include <iostream>#include <thread> void foo(){// 模拟耗费大量资源的操作std::this_thread::sleep_for(std::chrono::seconds(1));} void bar(){// 模拟耗费大量资源的操作std::this_thread::sleep_for(std::chrono::seconds(1));} int main(){std::cout<<"启动第一助手...\n";std::jthread helper1(foo); std::cout<<"启动第二助手...\n";std::jthread helper2(bar); std::cout<<"等待助手结束..."<<std::endl; helper1.join(); helper2.join(); std::cout<<"完成!\n";}
输出:
启动第一助手... 启动第二助手... 等待助手结束... 完成!
[编辑]引用
- C++23 标准(ISO/IEC 14882:2024):
- 33.4.4.3 Members [thread.jthread.mem]
- C++20 标准(ISO/IEC 14882:2020):
- 32.4.3.2 Members [thread.jthread.mem]
[编辑]参阅
容许线程从线程句柄独立开来执行 (公开成员函数) | |
检查线程是否可合并,即潜在运行于并行上下文之中 (公开成员函数) | |
thrd_join 的 C 文档 |