C 11 14 執行緒中使用Lambda函式的方法

2022-10-03 23:57:19 字數 1341 閱讀 6883

多執行緒中使用lambda

在本篇文章中,主要介紹lamb程式設計客棧da函式在多執行緒中的使用。

先從下面的例子開始吧:

#include

#include

int main()

); std::cout << "main thread\n";

t.join();

return 0;

}在此基礎上我們將建立5個執行緒,然後把執行緒放進乙個vector容器中, 用for_eaqspubbch()完成執行緒的匯合(join):

#include

#include

#include

#include

int main()

)); }

std::cout << "main thread\n";

// 通過 for_each 迴圈每乙個執行緒

// 第三個引數賦值乙個task任務

// 符號''會告訴編譯器我們正在用乙個匿名函式

// lambda函式將它的引數作為執行緒的引用t

// 然後乙個乙個的join

std::for程式設計客棧.begin(), workers.end(), (std::thread &t;)

);return 0;

}輸出應該像這樣:

thread function

thread function

thread function

thread function

thread function

main thread

vector容器包含個工作執行緒,然後在它們結束任務之後,與主線程匯合。

併發程式設計的不確定性

從上面的輸出中可以看出,我們無法分辨哪乙個執行緒在列印。

因此,我們需要在每個執行緒上新增乙個標記。鑑於我們使用lambda,所以我們可以嘗試下它的捕獲能力。

通過將i的值傳遞給執行緒,使用[i]我們可以將索引傳遞到執行緒函式中:

for (int i = 0; i < 5; i++)

));}

輸出:thread function thread function thread function thread function thread function

main thread42

103每次執行的輸出可能不同,這體現了併發程式設計的不確定性性質。

此外,我們可以從輸出中看到,甚至在列印語句之間,也可以是搶占式的,換句話說,排程程式可以隨時中斷。

因此,由於當前程式設計的性質,我們使用lambda捕獲特性的努力沒有成功。

本文標題: c++11/14 執行緒中使用lambda函式的方法

本文位址:

C 11 14 執行緒中使用Lambda函式

include include int main std cout main thread n t.join return 0 在此基礎上我們將建立5個執行緒,然後把執行緒放進乙個vector容器中,用for each 完成執行緒的匯合 join include include include in...

c 11 14 多執行緒要點彙總

在c 11以前,c 的多執行緒程式設計均需依賴系統或第三方介面實現,一定程度上影響了 的移植性。c 11中,引入了boost庫中的多執行緒部分內容,形成c 標準,形成標準後的boost多執行緒程式設計部分介面基本沒有變化,這樣方便了以前使用boost介面開發的使用者切換使用c 標準介面,很容易把bo...

C 11 14特性備忘

template auto add t x,u y int array for auto x array include 建構函式列表初始化 class magic magic magic std vector int v 普通函式形參 void func std initializer list ...