c++11–thread库介绍

一.创建线程

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include<thread>

void printHelloWorld()
{
std::cout<<"Hello world"<<std::endl;
}
int main()
{
//1.创建线程
std::thread thread1(printHelloWorld);
return 0;
}

但这个时候会报错,因为主线程先于子线程结束

二.join()函数

强制主线程等待子线程结束后再结束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<thread>

void printHelloWorld()
{
std::cout<<"Hello world"<<std::endl;
}
int main()
{
//1.创建线程
std::thread thread1(printHelloWorld);
//2.主程序等待线程执行完毕
thread1.join();
return 0;
}

三.detach()函数

分离线程,即使主线程先于子线程结束也不会报错,此时子线程在后台运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<thread>

void printHelloWorld()
{
std::cout<<"Hello world"<<std::endl;
}
int main()
{
//1.创建线程
std::thread thread1(printHelloWorld);
//2.分离线程,即使主线程先于子线程结束也不会报错
thread1.detach();
return 0;
}

四.joinable()函数

判断是否可以调用join()函数或者detach()函数,返回布尔值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<thread>

void printHelloWorld()
{
std::cout<<"Hello world"<<std::endl;
}
int main()
{
//1.创建线程
std::thread thread1(printHelloWorld);
//2.判断能否调用join函数
bool isJoin = thread1.joinable();
if(isJoin)
{
thread1.join();
}
return 0;
}