c 11 14 多執行緒要點彙總

2022-10-03 23:09:19 字數 2236 閱讀 1944

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

我們通過如下幾部分介紹c++11多執行緒方面的介面及使用方法。

1. std::thread

std::thread為c++11的執行緒類,使用方法和boost介面一樣,非常方便,同時,c++11的std::thread解決了boost::thread中構成引數限制的問題,我想這都是得益於c++11的可變引數的設計風格。

我們通過如下**熟悉下std::thread使用風格:

#include

#include

void threadfun1()

void threadfun2(int iparam, std::string sparam)

int main()

注意編譯時要使用:g++ c11.cpp -lpthread

執行結果:

threadfun1 - 1

threadfun2 - 1

threadfun1 - 2

join

detach

2. std::atomic

std::atomic為c++11封裝的原子資料型別。

什麼是原子資料型別?從功能上看,簡單地說,原子資料型別不會發生資料競爭,能直接用在多執行緒中而不必我們使用者對其進行新增互斥資源鎖的型別。從實現上來看,我們可以理解為這些原子型別內部自己加了鎖。

我們下面通過乙個測試例子說明原子型別std::atomic的特點。

我們使用10個執行緒,把std::atomic型別的變數icount從10減到1。

#include

#include

#include

#include

#include

std::atomic bisready(false);

std::atomic icount(10);

void threadfunwww.cppcns.com1()

while (icount > 0) }

int main()

for (auto& th : lstthread) }

執行結果:

icount:10

icount:9

icount:8

icount:7

icount:6

icount:5

icount:4

icount:3

icount:2

icount:1

從上面的結果可以看到,icount的最小結果是1,沒有出現小於等於0的情況,大家可以把icount改成100甚至1000看看,可能會更直觀一點。

3. std::condition_variable

c++11中的std::condition_variable就像linux下使用pthread_cond_wait和pthread_cond_signal一樣,可以讓執行緒休眠,直到被喚醒,然後再重新執行。執行緒等待在多執行緒程式設計中使用非常頻繁,經常需要等待一些非同步執行的條件的返回結果。

**如下:

#include // std::cout

#include // std::thread

#include // std::mutex, std::unique_lock

# // std::condition_variable

std:www.cppcns.com:mutex mtx;

std::condition_variable cv;

bool ready = false;

void print_id(int id)

void go()

int main()

執行結果:

10 threads ready to race...

thread 0

thread 1

thread 2

thread 3

thread 4

thread 5

thread 6

thread 7

thread 8

thread 9

上面的**,在呼叫go函式之前,10個執行緒都處於休眠狀態,當cv.notify_all()執行後,執行緒休眠結束,繼續往下執行,最終輸出如上結果。

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特性備忘

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 ...

C 11 14 簡易推薦小記

之前了解過一些c 新標準的內容,覺得很不錯,在此寫篇小記,簡易推薦一下 容器內元素操作是個很普通的需求,工作中應是屢見不鮮,這裡假設有個list 容器,儲存的是一系列 intc 表達一下,大概是這個樣子 ifndef test 1 h define test 1 h include include ...