<thread>

公共成员函数
<thread>

std::thread::join

void join();
加入线程
当线程执行结束后,此函数返回。

此操作将此函数返回的时刻与线程内所有操作的完成进行同步:它会阻塞调用此函数的线程的执行,直到线程构造时调用的函数返回(如果尚未返回)。

调用此函数后,thread 对象将变为非joinable 状态,并且可以安全地被销毁

参数



返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// example for thread::join
#include <iostream>       // std::cout
#include <thread>         // std::thread, std::this_thread::sleep_for
#include <chrono>         // std::chrono::seconds
 
void pause_thread(int n) 
{
  std::this_thread::sleep_for (std::chrono::seconds(n));
  std::cout << "pause of " << n << " seconds ended\n";
}
 
int main() 
{
  std::cout << "Spawning 3 threads...\n";
  std::thread t1 (pause_thread,1);
  std::thread t2 (pause_thread,2);
  std::thread t3 (pause_thread,3);
  std::cout << "Done spawning threads. Now waiting for them to join:\n";
  t1.join();
  t2.join();
  t3.join();
  std::cout << "All threads joined!\n";

  return 0;
}

输出(3秒后)
Spawning 3 threads...
Done spawning threads. Now waiting for them to join:
pause of 1 seconds ended
pause of 2 seconds ended
pause of 3 seconds ended
All threads joined!


数据竞争

对象被修改。
请注意,对thread 对象本身的任何操作都不是同步的(与其代表的线程内的操作不同)。

异常安全

基本保证:如果此成员函数抛出异常,则thread 对象将保持有效状态。

如果调用失败,将抛出system_error 异常
异常类型错误代码描述
system_errorerrc::invalid_argument- thread 对象不是joinable
system_errorerrc::no_such_process- thread 对象无效
system_errorerrc::resource_deadlock_would_occur- 当前线程与尝试加入的线程相同,或
- 检测到死锁(实现可能检测到某些死锁情况)。

请注意,如果对象所代表的线程因未捕获的异常而终止,当前线程无法捕获此异常,并且会自动调用terminate()

另见