C++11并发编程:多线程std::thread
一:概述
C++11引入了thread类,大大降低了多线程使用的复杂度,原先使用多线程只能用系统的API,无法解决跨平台问题,一套代码平台移植,对应多线程代码也必须要修改。现在在C++11中只需使用语言层面的thread可以解决这个问题。
所需头文件
二:构造函数
1.默认构造函数
- thread()noexcept
- 一个空的std::thread执行对象
2.初始化构造函数
template
explicitthread(Fn&&fn,Args&&...args);
创建std::thread执行对象,线程调用threadFun函数,函数参数为args。
voidthreadFun(inta) { cout<<"thisisthreadfun!"<3.拷贝构造函数
thread(constthread&)=delete;
拷贝构造函数被禁用,std::thread对象不可拷贝构造
voidthreadFun(int&a) { cout<<"thisisthreadfun!"<4.Move构造函数
thread(thread&&x)noexcept
调用成功原来x不再是std::thread对象
voidthreadFun(int&a) { cout<<"thisisthreadfun!"<三:成员函数
1.get_id()
获取线程ID,返回类型std::thread::id对象。
threadt1(threadFun); thread::idthreadId=t1.get_id(); cout<<"线程ID:"<ostringstreamoss; oss< 2.join()
创建线程执行线程函数,调用该函数会阻塞当前线程,直到线程执行完join才返回。
threadt1(threadFun); t1.join()//阻塞等待3.detach()
detach调用之后,目标线程就成为了守护线程,驻留后台运行,与之关联的std::thread对象失去对目标线程的关联,无法再通过std::thread对象取得该线程的控制权。
4.swap()
交换两个线程对象
threadt1(threadFun1); threadt2(threadFun2); cout<<"线程1的ID:"<5.hardware_concurrency()
获得逻辑处理器储量,返回值为int型
intcoreNum=thread::hardware_concurrency();四:使用
1.创建线程
voidthreadFun1() { cout<<"thisisthreadfun1!"<2.创建线程,传参
voidthreadFun1(intv) { cout<<"thisisthreadfun1!"<需要注意,变量intvalue和intv做变量传递时并不是引用,而是对变量做了拷贝,所以在传递给intv前,intvalue不能出作用域(释放了内存),join(),可以保证intvalue变量释放内存,如果使用detach(),可能存在这种情况。
3.创建线程,引用传参
voidthreadFun1(int&v) { cout<<"thisisthreadfun1!"<4.创建建线程,线程函数为类成员函数
classObject { public: Object() { cout<<"构造函数"<总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。