std::jthread::join
来自cppreference.com
<tbody>
</tbody>
void join(); |
(C++20 起) | |
阻塞当前线程直至 *this 所标识的线程结束其执行。
*this 所标识的线程的完成同步于对应的从 join() 成功返回。
*this 自身上不进行同步。同时从多个线程在同一 jthread 对象上调用 join() 构成数据竞争,导致未定义行为。
参数
(无)
返回值
(无)
后条件
joinable() 为 false。
异常
若出现错误则为 std::system_error。
错误条件
- 若
this->get_id() == std::this_thread::get_id()(检测到死锁)则为 std::errc。 - 若线程非法则为 std::errc。
- 若 joinable() 为
false则为 std::errc。
示例
运行此代码
#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 文档
| |