C++11 thread::join(4)

原文地址:http://www.cplusplus.com/reference/thread/thread/join/
public member function

<thread>

std::thread::join

void join();
Join thread
The function returns when the thread execution has completed.

当该线程执行完成后才返回。(即等待子线程执行完毕才继续执行主线程)


This synchronizes the moment this function returns with the completion of all the operations in the thread: This blocks the execution of the thread that calls this function until the function called on construction returns (if it hasn‘t yet).

该函数的返回与子线程执行完毕同步,该函数会阻塞调用该函数的线程直到子线程调用完毕。

例子:

#include <iostream>
#include <thread>
#include <vector>
#include <ctime>
using namespace std;
//delay(n) 延时n秒  
void delay(double sec)  
{  
    time_t start_time, cur_time; // 变量声明  
    time(&start_time);  
    do {  
        time(&cur_time);  
        }while((cur_time - start_time) < sec );  
};  
void show(int n){
	while(n>5){
		cout<<"currentThread is "<<pthread_self()<<",Now n is "<<n<<endl;
		delay(1);
		n--;
	}
}
int main()
{
	cout<<"main starts"<<endl;
	thread t2(show,10);
	//t2.join();
	cout<<"main complete!"<<endl;
}
运行截图:


可以看到,t2还没有执行完毕就已经结束了。

加上t2.join()之后的执行结果:


可以看到,阻塞了主线程,等待t2执行完毕才继续执行main线程。


After a call to this function, the thread object becomes non-joinable and can be destroyed safely.

调用该函数后,子线程对象变成non-joinable以及可以安全地销毁。


Parameters

none

Return value

none

Example

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;
}


Output (after 3 seconds):
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!

Data races

The object is modified.
Note that any operations on the thread object itself are not synchronized (unlike the operations within the thread it represents).

Exception safety

Basic guarantee: if an exception is thrown by this member function, the thread object is left in a valid state.

If the call fails, a system_error exception is thrown:
exception type error condition description
system_error errc::invalid_argument - The thread object is not joinable
system_error errc::no_such_process - The thread object is not valid
system_error errc::resource_deadlock_would_occur - The current thread is the same as the thread attempted to join, or
- A deadlock was detected (implementations may detect certain cases of deadlock).

Note that if the thread represented by the object terminates with an uncaught exception, this cannot be caught by the current thread, and terminate() is automatically called.


—————————————————————————————————————————————————————————————————

//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。

转载请注明出处:http://blog.csdn.net/qq844352155

author:天下无双

Email:[email protected]

2014-9-4

于GDUT

——————————————————————————————————————————————————————————————————




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。