C++11threadjoin(4)
原文地址:http://www.cplusplus.com/reference/thread/thread/join/
public member function
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
#include
#include
#include
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 | 1 |
1 | // example for thread::join |
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
- The thread object is not joinable
- The thread object is not valid
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()](http://www.cplusplus.com/terminate)
is automatically called.
—————————————————————————————————————————————————————————————————
//写的错误或者不好的地方请多多指导,可以在下面留言或者点击左上方邮件地址给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。
转载请注明出处:http://blog.csdn.net/qq844352155
author:天下无双
Email:coderguang@gmail.com
2014-9-4
于GDUT
——————————————————————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/c11threadjoin4/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!