C+11并发编程:多线程std:thread

一:概述

C++11引入了thread类,大大降低了多线程使用的复杂度,原先使用多线程只能用系统的API,无法解决跨平台问题,一套代码平台移植,对应多线程代码也必须要修改。现在在C++11中只需使用语言层面的thread可以解决这个问题。

所需头文件

二:构造函数

1.默认构造函数

thread() noexcept

一个空的std::thread执行对象

2.初始化构造函数

template

explicit thread(Fn&& fn, Args&&… args);

创建std::thread执行对象,线程调用threadFun函数,函数参数为args。

3.拷贝构造函数

thread(const thread&) = delete;

拷贝构造函数被禁用,std::thread对象不可拷贝构造

4.Move构造函数

thread(thread&& x)noexcept

调用成功原来x不再是std::thread对象

三:成员函数

1.get_id()

获取线程ID,返回类型std::thread::id对象。

2.join()

创建线程执行线程函数,调用该函数会阻塞当前线程,直到线程执行完join才返回。

3.detach()

detach调用之后,目标线程就成为了守护线程,驻留后台运行,与之关联的std::thread对象失去对目标线程的关联,无法再通过std::thread对象取得该线程的控制权。

4.swap()

交换两个线程对象

5.hardware_concurrency()

获得逻辑处理器储量,返回值为int型

四:使用

1.创建线程

2.创建线程,传参

需要注意,变量int value 和int v 做变量传递时并不是引用,而是对变量做了拷贝,所以在传递给int v前,int value不能出作用域(释放了内存),join(),可以保证int value变量释放内存,如果使用detach(),可能存在这种情况。

3.创建线程,引用传参

4.创建建线程,线程函数为类成员函数

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20190104G0V7W300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券