欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++中的static修飾符示例詳解

    c++中的static修飾符示例詳解

    在c++中,靜態(tài)成員是屬于整個類而不是某個對象,靜態(tài)成員變量只存儲一份供所有對象共用,下面這篇文章主要給大家介紹了關(guān)于c++中static修飾符的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • C++中的unordered_map用法

    C++中的unordered_map用法

    當你在C++中需要使用哈希表(無序映射)來管理鍵值對時,unordered_map?是一個非常有用的數(shù)據(jù)結(jié)構(gòu),本文主要介紹了C++中的unordered_map用法,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • OpenGL繪制貝塞爾曲線

    OpenGL繪制貝塞爾曲線

    這篇文章主要為大家詳細介紹了OpenGL繪制貝塞爾曲線,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用mmap實現(xiàn)多進程對大文件拷貝

    使用mmap實現(xiàn)多進程對大文件拷貝

    這篇文章主要介紹了使用mmap實現(xiàn)多進程對大文件拷貝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言實現(xiàn)查詢自動售貨機中的商品價格【實例分享】

    C語言實現(xiàn)查詢自動售貨機中的商品價格【實例分享】

    本文主要介紹了C語言實現(xiàn)查詢自動售貨機中的商品價格的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • C語言遞歸在實踐題目中應(yīng)用詳解

    C語言遞歸在實踐題目中應(yīng)用詳解

    遞歸是C語言中非常重要的知識點,其中的大事化小等思想對初學(xué)C語言的小伙伴來說不是很友好,因此我整理了遞歸的經(jīng)典題目并向外拓展,給你全面的介紹,重新認識遞歸
    2022-05-05
  • C語言調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    C語言調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    SQLite是一種輕量級的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是一個開源的、零配置的、服務(wù)器端的、自包含的、零管理的、事務(wù)性的SQL數(shù)據(jù)庫引擎,本文主要介紹了如何調(diào)用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查,需要的可以參考一下
    2023-08-08
  • C語言中關(guān)于庫函數(shù) qsort 快排的用法

    C語言中關(guān)于庫函數(shù) qsort 快排的用法

    快速排序Qsort是所有學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu)最基礎(chǔ)的一個部分,也是考試題和面試的一個小重點。本片文章帶你了解Qsort的詳細用法規(guī)則
    2021-09-09
  • Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)庫采集

    Qt數(shù)據(jù)庫應(yīng)用之實現(xiàn)通用數(shù)據(jù)庫采集

    這篇文章主要為大家介紹了Qt中是如何實現(xiàn)通用數(shù)據(jù)庫采集的,文中的示例代碼講解詳細,對我們學(xué)習(xí)Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C語言實現(xiàn)航班管理系統(tǒng)

    C語言實現(xiàn)航班管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)航班管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論