Thead Study

1.Thead线程库的基本使用

区分线程和进程:什么是进程,进程是运行中的程序,线程可以理解是进程中的进程

单线程程序是串性的,从上往下依次执行。而多线程程序是并行的,可以提高程序的运行效率,线程的最大数量取决于cpu的核心数。

创建线程

一个最基本的线程创建的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include<thread>
void print_helloworld()
{
std::cout << "Hello World" << std::endl;
}
int main()
{
//1.thead crate
std::thread thread1(print_helloworld);

return 0;
}

运行时发现报错了,这是因为主线程执行结束退出了,而我们创建的线程却还在运行,此时程序会报错;

等待线程完成

join()可以用来等待线程执行完毕,主程序不会立即退出,会检查其他线程是否执行了return,如果未执行,则会等待;

换句话说join阻塞了main()函数执行;

当我们加上这一句后再运行程序,报错消失了;

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<iostream>
#include<thread>
void print_helloworld()
{
std::cout << "Hello World" << std::endl;
}
int main()
{
//1.thead crate
std::thread thread1(print_helloworld);
thread1.join();
return 0;
}

线程传参

给线程传递参数时需要在线程创建时就为其添加参数;

1
std::thread thread1(print_helloworld,"hello Thread");

else

detach()可以让主线程正常退出不报错,运行完main()之后销毁thread1;

1
thread1.detach();

joinable(),detachable()都是检查函数是否可以开启进程的方法,返回bool值

1
2
3
4
5
isJoin=thread1.joinable()
if (isJoin)
{
thread1.join();
}

2.线程函数中的数据未定义错误

传递临时变量


Thead Study
http://example.com/2024/03/18/Thead-Study/
作者
FUX1AOYUN
发布于
2024年3月18日
许可协议