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

C++11/14 線程中使用Lambda函數(shù)的方法

 更新時間:2019年01月22日 14:40:28   作者:lesliefish  
這篇文章主要介紹了C++11/14 線程中使用Lambda函數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

多線程中使用lambda

在本篇文章中,主要介紹lambda函數(shù)在多線程中的使用。

先從下面的例子開始吧:

#include <iostream>
#include <thread>

int main()
{
  std::thread t([]()
  {
    std::cout << "thread function\n";
  });
  std::cout << "main thread\n";
  t.join();
  return 0;
}

在此基礎(chǔ)上我們將創(chuàng)建5個線程,然后把線程放進一個vector容器中, 用for_each()完成線程的匯合(join):

#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>

int main()
{
  // vector 容器存儲線程
  std::vector<std::thread> workers;
  for (int i = 0; i < 5; i++) 
  {
    workers.push_back(std::thread([]() 
    {
      std::cout << "thread function\n";
    }));
  }
  std::cout << "main thread\n";

  // 通過 for_each 循環(huán)每一個線程
  // 第三個參數(shù)賦值一個task任務(wù)
  // 符號'[]'會告訴編譯器我們正在用一個匿名函數(shù)
  // lambda函數(shù)將它的參數(shù)作為線程的引用t
  // 然后一個一個的join
  std::for_each(workers.begin(), workers.end(), [](std::thread &t;) 
  {
    t.join();
  });

  return 0;
}

輸出應(yīng)該像這樣:

thread function
thread function
thread function
thread function
thread function
main thread

vector容器包含個工作線程,然后在它們結(jié)束任務(wù)之后,與主線程匯合。

并發(fā)編程的不確定性

從上面的輸出中可以看出,我們無法分辨哪一個線程在打印。

因此,我們需要在每個線程上添加一個標記。鑒于我們使用lambda,所以我們可以嘗試下它的捕獲能力。

通過將i的值傳遞給線程,使用[i]我們可以將索引傳遞到線程函數(shù)中:

for (int i = 0; i < 5; i++) 
{
  workers.push_back(std::thread([i]() 
  {
    std::cout << "thread function " << i << "\n";
  }));
}

輸出:

thread function thread function thread function thread function thread function
main thread
4
2
1
0
3

每次運行的輸出可能不同,這體現(xiàn)了并發(fā)編程的不確定性性質(zhì)。

此外,我們可以從輸出中看到,甚至在打印語句之間,也可以是搶占式的,換句話說,調(diào)度程序可以隨時中斷。

因此,由于當前編程的性質(zhì),我們使用lambda捕獲特性的努力沒有成功。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言操作符基礎(chǔ)知識詳解

    C語言操作符基礎(chǔ)知識詳解

    這篇文章主要以圖文結(jié)合的方式為大家詳細介紹了C語言位運算基礎(chǔ)知識,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-10-10
  • 解決C++中事件不響應(yīng)的方法詳解

    解決C++中事件不響應(yīng)的方法詳解

    本篇文章是對C++事件不響應(yīng)的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C/C++實現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    C/C++實現(xiàn)發(fā)送與接收HTTP/S請求的示例代碼

    HTTP(Hypertext Transfer Protocol)是一種用于傳輸超文本的協(xié)議,它是一種無狀態(tài)的、應(yīng)用層的協(xié)議,用于在計算機之間傳輸超文本文檔,通常在 Web 瀏覽器和 Web 服務(wù)器之間進行數(shù)據(jù)通信,本文給大家介紹了C/C++發(fā)送與接收HTTP/S請求,需要的朋友可以參考下
    2023-11-11
  • C語言當函數(shù)執(zhí)行成功時return1還是0

    C語言當函數(shù)執(zhí)行成功時return1還是0

    本文主要介紹了C語言當函數(shù)執(zhí)行成功時return1還是0,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語言超詳細文件操作基礎(chǔ)上篇

    C語言超詳細文件操作基礎(chǔ)上篇

    這篇文章主要為大家詳細介紹了C語言的文件操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++ vector模擬實現(xiàn)的代碼詳解

    C++ vector模擬實現(xiàn)的代碼詳解

    vector是表示可變大小數(shù)組的序列容器,就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存儲元素,本質(zhì)講,vector使用動態(tài)分配數(shù)組來存儲它的元素,本文將給大家詳細介紹一下C++ vector模擬實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C語言實現(xiàn)簡易撲克牌游戲

    C語言實現(xiàn)簡易撲克牌游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡易撲克牌游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • visual studio 2019編譯c++17的方法

    visual studio 2019編譯c++17的方法

    這篇文章主要介紹了visual studio 2019編譯c++17的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • C語言 實現(xiàn)N階乘的程序代碼

    C語言 實現(xiàn)N階乘的程序代碼

    本篇文章是對c語言中實現(xiàn)N階乘的程序代碼進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中的幾種排序算法

    C++中的幾種排序算法

    這篇文章主要介紹了C++中的幾種排序算法,需要的朋友可以參考下
    2014-02-02

最新評論

巧家县| 哈巴河县| 舒兰市| 武定县| 托克逊县| 万载县| 祁连县| 贵港市| 五河县| 阿克陶县| 滁州市| 新晃| 临汾市| 健康| 沙河市| 岱山县| 泰安市| 绍兴县| 庄河市| 西乌| 墨竹工卡县| 巫山县| 金溪县| 固镇县| 太白县| 宝山区| 乐业县| 资源县| 河曲县| 黄浦区| 峡江县| 清新县| 罗甸县| 天祝| 伊通| 西畴县| 顺平县| 榕江县| 洛浦县| 宁化县| 崇义县|