目錄
一、atomic
1、std::atomic_flag
2、 std::atomic
二、std::thread
三、std::condition_variable
四、右值引用
五、std::function、std::bind
六、lambda表示式
atomic_flag 一種簡單的原子布林型別,只支援兩種操作,test-and-set 和 clear。
std::atomic_flag 只有預設建構函式,拷貝建構函式已被禁用
atomic_flag_init: 如果某個 std::atomic_flag 物件使用該巨集初始化,那麼可以保證該 std::atomic_flag 物件在建立時處於 clear 狀態。
test_and_set() :檢查 std::atomic_flag 標誌,如果 std::atomic_flag 之前沒有被設定過,則設定 std::atomic_flag 的標誌,並返回先前該 std::atomic_flag 物件是否被設定過,如果之前 std::atomic_flag 物件已被設定,則返回 true,否則返回 false。
clear():清除 std::atomic_flag 物件的標誌位,即設定 atomic_flag 的值為 false。
由此可以構造乙個簡單的鎖
std::atomic_flag lock = atomic_flag_init; //clear 狀態
while (lock.test_and_set()); //返回false,同時設定atomic_flag的標誌,之後其
/* */ //他執行緒呼叫此函式都返回true
lock.clear(); //重置為 clear 狀態,其他執行緒開始搶占
std::atomic為c++11封裝的原子資料型別。
先上張圖:
以上就是支援的資料型別。
原子操作好像是在彙編上實現的,所以速度要比各種鎖快上不少(好像)
除此之外,還可以進行std::atomic模板類使物件操作為原子操作。
#include #include using namespace std;
void fun1()
很明顯,無法通過編譯。
error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'|
引用是變數的別名,使用常量初始化引用是錯誤的。
當然,我們可以通過新增const來進行初始化,但不能對其的值進行修改。
右值引用:
int main()
;a fun()
int main()
fun()返回的右值本來在表示式語句結束後,其生命也就該終結了(因為是臨時變數),而通過右值引用,該右值又重獲新生,其生命期將與右值引用型別變數a
的生命期一樣,只要a
還活著,該右值臨時變數將會一直存活下去。實際上就是給那個臨時變數取了個名字。
舉個栗子:
#include #include using namespace std;
class a
auto fun = std::bind(add, std::placeholders::_1, std::placeholders::_2);
fun1(3, 1);
其中fun的型別就是function。
[capture list] (params list) mutable exception-> return type
capture list:捕獲外部變數列表
params list:形參列表
mutable指示符:用來說用是否可以修改捕獲的變數
exception:異常設定
return type:返回型別
function body:函式體
其中[capture list]:
1.[var]表示值傳遞方式捕捉變數var;
2.[=]表示值傳遞方式捕捉所有父作用域的變數(包括this);
3.[&var]表示引用傳遞捕捉變數var;
4.[&]表示引用傳遞方式捕捉所有父作用域的變數(包括this);
5.[this]表示值傳遞方式捕捉當前的this指標。
int main()
; fun(1,2);
return 0;
}/** output: 3 **/
c 11 特性學習
auto 含義改變,現為自動型別推斷 register c 11之前為建議使用cpu暫存器儲存變數,現在幾乎沒有意義 include include include include include include using namespace std initial intsum initiali...
C 11新特性學習
lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...
C 11 新特性試用
在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...