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的執行緒,並排程執行 之後進行建...