C++

C++,第1张

C++11的标准库中封装了线程的类,因此可以跨平台的使用线程库:

#include 
#include 
#include 
using namespace std;

void tFunc(int a, const char* str)
{
	cout<<"thread func run, param a:"<

需要指出的是,如果构造thread时,如果需要向线程函数tFunc传递引用参数,则需要通过std::ref进行传参:

#include 
#include 
#include 
using namespace std;

void tFunc(int& a, const char* str)
{
	cout<<"thread func run, param a:"<

join():

join成员函数表示等待线程的完成,当main函数调用了t1.join()后即进入了阻塞状态,直到线程t1运行完毕,当join返回后,主线程释放线程的资源(与多进程waitpid类似)
注意:如果没有执行join,线程对象t1会在主线程main的return后被析构,但线程函数还处于执行中,因此可能会产生异常。

detach():

detach成员函数表示子线程与主线程进行分离,detach返回后子线程成为独立的线程,子线程执行完成后会自己释放掉资源。分离后的,主线程将对子线程没有控制权。

joinable():

用于判断一个线程是否可以join,如果返回false,那么有以下几种可能:

  • 这是个默认构造的thread对象,也就是说还没有执行相应的函数
  • 这个线程对象的控制权被转移(通过转移构造函数或转移赋值函数)到其他线程对象上
  • 这个线程对象已经调用过了join或detach函数

转移控制权:

thread禁用了拷贝构造函数和赋值运算符,只能通过移动构造函数,和移动赋值运算符将控制权进行转移:

#include 
#include 
#include 
using namespace std;

void tFunc(int a, const char* str)
{
	cout<<"thread func run, param a:"<

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/867107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-12
下一篇2022-05-12

发表评论

登录后才能评论

评论列表(0条)