◐ Shell
clean mode source ↗

std::thread::join - cppreference.com

来自cppreference.com

阻塞当前线程直至 *this 所标识的线程结束其执行。

*this 所标识的线程的完成同步于对应的从 join() 成功返回。

*this 自身上不进行同步。同时从多个线程在同一 thread 对象上调用 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::thread helper1(foo);

    std::cout << "启动第二助手...\n";
    std::thread helper2(bar);

    std::cout << "等待助手结束..." << std::endl;
    helper1.join();
    helper2.join();
 
    std::cout << "完成!\n";
}

输出:

启动第一助手...
启动第二助手...
等待助手结束...
完成!

引用

  • C++23 标准(ISO/IEC 14882:2024):
  • 33.4.3.6 Members [thread.thread.member]
  • 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]

参阅