thread join与detach
时间: 2023-09-23 18:07:14 浏览: 62
thread join和detach是线程管理的两种方式。
thread join用于等待线程执行完成。当调用join方法时,主线程会被阻塞,直到被调用的线程执行完毕。这样可以确保主线程在子线程执行完成后再继续执行。
示例代码如下:
```cpp
#include <iostream>
#include <thread>
void myFunction() {
// 线程执行的代码
std::cout << "子线程执行完毕" << std::endl;
}
int main() {
std::thread t(myFunction); // 创建子线程
t.join(); // 等待子线程执行完成
std::cout << "主线程继续执行" << std::endl;
return 0;
}
```
运行结果:
```
子线程执行完毕
主线程继续执行
```
thread detach用于将线程与主线程分离。分离后的线程将会独立运行,主线程不会再对其进行管理。一旦调用detach方法,主线程就不再关心该线程的状态,也不能再通过join方法等待其执行完成。
示例代码如下:
```cpp
#include <iostream>
#include <thread>
void myFunction() {
// 线程执行的代码
std::cout << "子线程执行中" << std::endl;
}
int main() {
std::thread t(myFunction); // 创建子线程
t.detach(); // 分离子线程
std::cout << "主线程继续执行" << std::endl;
return 0;
}
```
运行结果:
```
主线程继续执行
子线程执行中(可能在主线程结束前打印,也可能在主线程结束后打印)
```
需要注意的是,一旦线程被分离,其生命周期将独立于主线程,无法再对其进行操作或控制。因此,在使用detach前必须确保子线程能够正常完成执行。