C++11threadjoin(4)


C++11threadjoin(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:coderguang@gmail.com

2014-9-4

于GDUT

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



发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注