多執行緒lambda資料捕獲

2021-09-05 11:56:57 字數 893 閱讀 5603

lambda函式的執行是在真正呼叫的時候,這和普通函式沒有太大區別,只是lambda沒有實際的名稱而已。lambda的另乙個特點是可以捕獲周圍的變數,捕獲的方式分為值和引用。

捕獲的是立刻發生的,而不是等到函式呼叫的時候,只要宣告乙個lambda而且宣告了捕獲,那麼捕獲的動作就會發生。但是注意,如果是傳遞引用,那麼得到的結果是不確定的,因為引用只是原來變數的乙個別名,這也是非常危險的行為。

給出**例項,多執行緒處理,先宣告兩個lambda,不立刻呼叫,但是捕獲卻立刻發生了。

#include

#include

intmain()

;auto fun2 =

[&a]()

;++a;

std::cout <<

"main thread reference, res = "

<< a << std::endl;

// 以下才是真正執行lambda

std::thread t1

(fun1)

; std::thread t2

(fun2)

; t1.

join()

; t2.

join()

;return0;

}

輸出:

main thread reference, res = 1

sub thread, res = 0

sub thread value, res = 1

使用lamda的好處是可以保留某個時刻的狀態,這是其他方式無法做到的。

另乙個更加

多執行緒之執行執行緒異常捕獲

description 執行緒異常捕捉 author administrator create 2019 12 23 22 22 public class threadexception static void thread1 catch interruptedexception e thread....

lambda表示式 寫多執行緒

jdk1.8 中lambda 表示式的出現,基本可以取替原來的匿名類實現多執行緒的方式。下面列舉常用的常用的三種情況。一 普通開啟非同步執行緒 new thread system.out.println aaa start 1 二 執行緒池開啟非同步執行緒 不接收返回引數 public static...

lambda表示式 與 多執行緒賣票

直接獻上簡陋的 具體相關解釋會在注釋中對應給出。學習嚴格按照之前所寫道的 在高內聚低耦合的前提下實現 執行緒 操作 資源類 首先是資源類部分,在資源類中買票的功能內聚 高內聚 class ticket finally public sale a start 名字叫做a的執行緒,並排程執行 之後進行建...