成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++11并發(fā)編程:多線程std::thread

一:概述

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、鎮(zhèn)平網(wǎng)絡(luò)推廣、微信小程序、鎮(zhèn)平網(wǎng)絡(luò)營銷、鎮(zhèn)平企業(yè)策劃、鎮(zhèn)平品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供鎮(zhèn)平建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:jinyejixie.com

C++11引入了thread類,大大降低了多線程使用的復(fù)雜度,原先使用多線程只能用系統(tǒng)的API,無法解決跨平臺問題,一套代碼平臺移植,對應(yīng)多線程代碼也必須要修改?,F(xiàn)在在C++11中只需使用語言層面的thread可以解決這個問題。

所需頭文件<thread>

二:構(gòu)造函數(shù)

1.默認(rèn)構(gòu)造函數(shù)

  • thread() noexcept
  • 一個空的std::thread執(zhí)行對象

2.初始化構(gòu)造函數(shù)

template<class Fn, class... Args>

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

創(chuàng)建std::thread執(zhí)行對象,線程調(diào)用threadFun函數(shù),函數(shù)參數(shù)為args。

void threadFun(int a)
{
  cout << "this is thread fun !" << endl;
}
thread t1(threadFun, 2);

3.拷貝構(gòu)造函數(shù)

thread(const thread&) = delete;

拷貝構(gòu)造函數(shù)被禁用,std::thread對象不可拷貝構(gòu)造

void threadFun(int& a)
{
  cout << "this is thread fun !" << endl;
}  
int value = 2;
thread t1(threadFun, std::ref(value));

4.Move構(gòu)造函數(shù)

thread(thread&& x)noexcept

調(diào)用成功原來x不再是std::thread對象

void threadFun(int& a)
{
  cout << "this is thread fun !" << endl;
} 
int value = 2;
thread t1(threadFun, std::ref(value));
thread t2(std::move(t1));
t2.join();

三:成員函數(shù)

1.get_id()

獲取線程ID,返回類型std::thread::id對象。

thread t1(threadFun);
thread::id threadId = t1.get_id();
cout << "線程ID:" << threadId << endl;
//threadId轉(zhuǎn)換成整形值,所需頭文件<sstream>
ostringstream  oss;
oss << t1.get_id();
string strId = oss.str();
unsigned long long tid = stoull(strId);
cout << "線程ID:" << tid << endl;

2.join()

創(chuàng)建線程執(zhí)行線程函數(shù),調(diào)用該函數(shù)會阻塞當(dāng)前線程,直到線程執(zhí)行完join才返回。

thread t1(threadFun);
t1.join() //阻塞等待

3.detach()

detach調(diào)用之后,目標(biāo)線程就成為了守護(hù)線程,駐留后臺運行,與之關(guān)聯(lián)的std::thread對象失去對目標(biāo)線程的關(guān)聯(lián),無法再通過std::thread對象取得該線程的控制權(quán)。

4.swap()

交換兩個線程對象

thread t1(threadFun1);
thread t2(threadFun2);
cout << "線程1的ID:" << t1.get_id() << endl;
cout << "線程2的ID:" << t2.get_id() << endl;
t1.swap(t2);
cout << "線程1的ID:" << t1.get_id() << endl;
cout << "線程2的ID:" << t2.get_id() << endl;

5.hardware_concurrency()

獲得邏輯處理器儲量,返回值為int型

int coreNum = thread::hardware_concurrency();

四:使用

1.創(chuàng)建線程

void threadFun1()
{
  cout << "this is thread fun1 !" << endl;
}
int main()
{
  thread t1(threadFun1);
  t1.join();
  getchar();
  return 1;
}

2.創(chuàng)建線程,傳參

void threadFun1(int v)
{
  cout << "this is thread fun1 !" << endl;
  cout << v << endl;
}
int main()
{
  int value = 6;
  thread t1(threadFun1, value);
  t1.join();
  getchar();
  return 1;
}

需要注意,變量int value 和int v 做變量傳遞時并不是引用,而是對變量做了拷貝,所以在傳遞給int v前,int value不能出作用域(釋放了內(nèi)存),join(),可以保證int value變量釋放內(nèi)存,如果使用detach(),可能存在這種情況。

3.創(chuàng)建線程,引用傳參

void threadFun1(int& v)
{
  cout << "this is thread fun1 !" << endl;
  cout << v << endl;
}
int main()
{
  int value = 6;
  thread t1(threadFun1, std::ref(value));
  t1.join();
  getchar();
  return 1;
}

4.創(chuàng)建建線程,線程函數(shù)為類成員函數(shù)

class Object
{
public:
  Object()
  {
    cout << "構(gòu)造函數(shù)" << endl;
  }
  ~Object()
  {
    cout << "析構(gòu)函數(shù)" << endl;
  }
  void fun(string info)
  {
    cout << info << endl;
  }
};
int main()
{
  Object obj;
  string str = "我是一個類的成員函數(shù)!";
  thread t1(&Object::fun, &obj, str);
  t1.join();
  getchar();
  return 1;
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

網(wǎng)頁名稱:C++11并發(fā)編程:多線程std::thread
URL鏈接:http://jinyejixie.com/article44/pgeiee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣品牌網(wǎng)站設(shè)計、網(wǎng)站策劃、云服務(wù)器定制開發(fā)、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
保康县| 辛集市| 靖宇县| 皮山县| 信丰县| 莱西市| 台前县| 孝义市| 清徐县| 当雄县| 旺苍县| 公主岭市| 泰来县| 革吉县| 贞丰县| 洮南市| 山东| 昌邑市| 无极县| 永康市| 秦皇岛市| 伊吾县| 通化县| 澄迈县| 兰州市| 调兵山市| 恩平市| 惠水县| 景宁| 应用必备| 富锦市| 辉南县| 邮箱| 三穗县| 年辖:市辖区| 泸水县| 天峨县| 神农架林区| 五寨县| 库尔勒市| 定边县|