std::thread::join
来自cppreference.com
void join(); |
(C++11 起) | |
阻塞当前线程直至 *this 所标识的线程结束其执行。
*this 所标识的线程的完成同步于对应的从 join()
成功返回。
*this 自身上不进行同步。同时从多个线程在同一 thread 对象上调用 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 <iostream> #include <thread> #include <chrono> 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 << "starting first helper...\n"; std::thread helper1(foo); std::cout << "starting second helper...\n"; std::thread helper2(bar); std::cout << "waiting for helpers to finish..." << std::endl; helper1.join(); helper2.join(); std::cout << "done!\n"; }
输出:
starting first helper... starting second helper... waiting for helpers to finish... done!
引用
- C++20 标准(ISO/IEC 14882:2020):
- 32.4.2.5 Members [thread.thread.member]
- C++17 标准(ISO/IEC 14882:2017):
- 33.3.2.5 thread members [thread.thread.member]
- C++14 标准(ISO/IEC 14882:2014):
- 30.3.1.5 thread members [thread.thread.member]
- C++11 标准(ISO/IEC 14882:2011):
- 30.3.1.5 thread members [thread.thread.member]
参阅
容许线程从线程句柄独立开来执行 (公开成员函数) | |
检查线程是否可合并,即潜在地运行于平行环境中 (公开成员函数) |