std::thread 的join
时间: 2023-09-08 22:17:16 浏览: 47
join() 是 std::thread 类的一个成员函数,用于等待线程执行完毕并回收线程资源。
当调用 join() 时,当前线程将阻塞,直到被调用的线程执行完毕。
如果调用 join() 时,被调用的线程已经执行完毕,那么 join() 立即返回。
如果不调用 join(),当 std::thread 对象被销毁时,会调用其析构函数,这时如果线程还在执行,会导致程序崩溃。
例如:
```
#include <iostream>
#include <thread>
void worker()
{
std::cout << "Worker thread running...\n";
}
int main()
{
std::thread t(worker);
std::cout << "Main thread running...\n";
t.join();
std::cout << "Worker thread finished.\n";
return 0;
}
```
输出:
```
Main thread running...
Worker thread running...
Worker thread finished.
```
相关问题
std::thread join
std::thread的join函数用于等待线程的结束。当调用std::thread对象的join函数时,当前线程会被阻塞,直到被调用的线程结束执行。在调用join函数之前,我们应该确保被调用的线程已经启动。
下面是一个示例代码:
```cpp
#include <iostream>
#include <thread>
void threadFunc() {
std::cout << "This is a thread." << std::endl;
}
int main() {
std::thread t(threadFunc); // 创建一个线程并指定执行函数
t.join(); // 等待线程执行完毕
std::cout << "Thread has finished." << std::endl;
return 0;
}
```
在上述代码中,我们创建了一个新的线程,并在其中执行threadFunc函数。在主线程中,我们调用了t.join()来等待新线程的执行完成。一旦join返回,我们就可以确定新线程已经结束,然后输出"Thread has finished"。
std::thread::join
std::thread::join是一个成员函数,用于等待线程的结束。在引用的代码中,d2.join()函数的作用是让主线程等待d2线程的执行完成,直到d2线程结束才能继续执行主线程的后续代码。具体来说,d2线程调用了join()函数,表示主线程要等待d2线程的任务完成才能继续执行。通过调用join()函数,可以避免主线程在d2线程还没有完成任务时退出,从而确保程序的正确执行。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [std::thread --join()](https://blog.csdn.net/shunlu5586/article/details/127783112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [c++11中关于std::thread的join的详解](https://download.csdn.net/download/weixin_38690079/12750322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [C++ std::thread join()函数调用](https://blog.csdn.net/baidu_28398971/article/details/126362262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]