最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年12月21日 08:35:38   作者:蝸牛201  
今天小編就為大家分享一篇關(guān)于C++11并發(fā)編程:多線程std::thread,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

一:概述

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

所需頭文件<thread>

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

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

  • thread() noexcept
  • 一個(gè)空的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ù)線程,駐留后臺運(yùn)行,與之關(guān)聯(lián)的std::thread對象失去對目標(biāo)線程的關(guān)聯(lián),無法再通過std::thread對象取得該線程的控制權(quán)。

4.swap()

交換兩個(gè)線程對象

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 做變量傳遞時(shí)并不是引用,而是對變量做了拷貝,所以在傳遞給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 = "我是一個(gè)類的成員函數(shù)!";
  thread t1(&Object::fun, &obj, str);
  t1.join();
  getchar();
  return 1;
}

總結(jié)

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

相關(guān)文章

  • C++操作文件進(jìn)行讀取、刪除、修改指定行

    C++操作文件進(jìn)行讀取、刪除、修改指定行

    今天小編就為大家分享一篇關(guān)于C++操作文件進(jìn)行讀取、刪除、修改指定行,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 如何在二叉樹中找出和為某一值的所有路徑

    如何在二叉樹中找出和為某一值的所有路徑

    本篇文章是對在二叉樹中找出和為某一值的所有路徑方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言練習(xí)之?dāng)?shù)組中素?cái)?shù)交換

    C語言練習(xí)之?dāng)?shù)組中素?cái)?shù)交換

    這篇文章主要為大家介紹了C語言數(shù)組中素?cái)?shù)交換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們)

    這篇文章主要介紹了Windows10配置VSCode C++環(huán)境(超詳細(xì),面向小白以及大佬們),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • C++實(shí)現(xiàn)LeetCode(173.二叉搜索樹迭代器)

    C++實(shí)現(xiàn)LeetCode(173.二叉搜索樹迭代器)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(173.二叉搜索樹迭代器),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言實(shí)現(xiàn)消消樂游戲的代碼分享

    C語言實(shí)現(xiàn)消消樂游戲的代碼分享

    本章我們將編寫十字消除游戲,用戶點(diǎn)擊空白方塊,沿其上下左右方向?qū)ふ业谝粋€(gè)彩色方塊,如果有兩個(gè)或兩個(gè)以上顏色一致,就將其消除,感興趣的可以了解一下
    2023-02-02
  • Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn)

    Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn)

    本文主要介紹了Visual Studio2022+QT6創(chuàng)建桌面應(yīng)用實(shí)現(xiàn),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Microsoft Visual C++ 安裝失敗 0x80070666的問題解決

    Microsoft Visual C++ 安裝失敗 0x80070666的問題解

    本文主要介紹了Microsoft Visual C++ 安裝失敗 0x80070666的問題解決,錯(cuò)誤可能由已安裝其他VisualC++版本、VisualC++安裝異常、Windows更新計(jì)劃安裝同一VisualC++包等原因引起,下面就來介紹一下解決方案,感興趣的可以了解一下
    2025-03-03
  • C語言宏函數(shù)container of()簡介

    C語言宏函數(shù)container of()簡介

    這篇文章介紹了C語言宏函數(shù)container of(),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • C語言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程

    C語言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程

    本文主要介紹了C語言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

外汇| 崇礼县| 遵化市| 万山特区| 富宁县| 固镇县| 灵宝市| 红原县| 读书| 来宾市| 泸州市| 二连浩特市| 集贤县| 正蓝旗| 哈巴河县| 和平区| 江孜县| 余干县| 东丽区| 从化市| 化德县| 灯塔市| 沈丘县| 安国市| 胶南市| 平南县| 彭阳县| 宜春市| 河津市| 邹城市| 涞水县| 洱源县| 美姑县| 乌鲁木齐县| 台山市| 丹棱县| 屏山县| 静安区| 葫芦岛市| 绥棱县| 阿拉善左旗|