thread

thread

  1. C++11新增了关于多线程相关的类和库函数,对并发编程提供了语言级别的支持
  2. 头文件#include <thread>
  3. 初始化thread t1(func)
    (1)func可以是函数指针、仿函数以及Lambda表达式
    (2)func表示创建出来的线程要执行的程序
#include <thread>
#include <iostream>
using namespace std;
void task1()
{
	for (int i = 0; i < 4; i++)
		cout << "task1 is processing" << endl;
}
void task2()
{
	for (int i = 0; i < 4; i++)
		cout << "task2 is processing" << endl;
}
int main()
{
	thread t1(task1); //创建子线程,构造函数中传入子线程需要执行的函数
	thread t2(task2);
	for (int i = 0; i < 4; i++)
		cout << "main is processing" << endl;
	t1.join();
	t2.join();
	return 0;
}

在这里插入图片描述
(3)从测试结果中可以看出,主线程和2个子线程交替执行
4. join:
(1)子线程对象是在主线程的栈上创建的,join函数的作用就是说,主线程执行完后先别退出,就是别销毁栈,因为线程函数还没有执行完的时候,线程对象就被销毁会发生错误,因此要保证线程函数执行完毕之前,thread对象还在,join函数可以使主线程执行完后先等待,等到子线程执行完后再销毁栈
5. detach:
(1)使用detach后会使主线程和子线程分离,分离之后主线程不在能和子线程发生联系了,不再能使用get_id来获取线程id或者使用join也不行

#include <thread>
#include <iostream>
using namespace std;
void task1()
{
	for (int i = 0; i < 4; i++)
		cout << "task1 is processing" << endl;
}
void task2()
{
	for (int i = 0; i < 4; i++)
		cout << "task2 is processing" << endl;
}
int main()
{
	thread t1(task1); //创建子线程,构造函数中传入子线程需要执行的函数
	thread t2(task2);
	t1.detach();
	t2.deatch();
	for (int i = 0; i < 4; i++)
		cout << "main is processing" << endl;
	return 0;
}

在这里插入图片描述
6. get_id:

  1. get_id是获取子线程的线程标志符,若主线程与子线程分离,即使用了detach则返回0,否则范围thread::id类型的数(数值类型)
thread t1(func);
t1.get_id();  //16852;
t1.detach();
t1.get_id(); // 0

参考文献

  1. c++多线程编程:join()函数与detch()函数的区别。
  2. 使用C++11进行多线程开发 (std::thread)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值