參考連線: 目錄
1.與 c++11 多執行緒相關的標頭檔案
2.簡單的示例
3.sleep_for,讓執行緒睡一會
4.mutex,互斥加鎖
c++11開始支援多執行緒程式設計,之前多執行緒程式設計都需要系統的支援,在不同的系統下建立執行緒需要不同的api如pthread_create(),createthread(),beginthread()等,使用起來都比較複雜,c++11提供了新標頭檔案、、、等用於支援多執行緒,並且有很好的平台移植性。
1.與 c++11 多執行緒相關的標頭檔案
c++11 新標準中引入了四個標頭檔案來支援多執行緒程式設計,他們分別是,,,和。
:該頭文主要宣告了兩個類, std::atomic 和 std::atomic_flag,另外還宣告了一套 c 風格的原子型別
和與 c 相容的原子操作的函式。
:該標頭檔案主要宣告了 std::thread 類,另外 std::this_thread 命名空間也在該標頭檔案中。
:該標頭檔案主要宣告了與互斥量(mutex)相關的類,包括 std::mutex 系列類,std::lock_guard,
std::unique_lock, 以及其他的型別和函式。
:該標頭檔案主要宣告了與條件變數相關的類,包括 std::condition_variable 和
std::condition_variable_any。
:該標頭檔案主要宣告了 std::promise, std::package_task 兩個 provider 類,以及 std::future 和
std::shared_future 兩個 future 類,另外還有一些與之相關的型別和函式,std::async() 函式就宣告在此標頭檔案中。
2.簡單的示例
使用join來阻塞主線程,直到子執行緒結束;
並使用lambda表示式寫子執行緒呼叫的函式;
使用mutex來加鎖,讓子執行緒依次呼叫lock與unlock之間的**;
並將mutex變數,引用的方式傳入lambda函式。
#include "stdafx.h"
#include using namespace std;
#include #include #include void hello()
int _tmain(int argc, _tchar* argv)
) ); }
for (auto& threadvar:threads)
cout << "main thread id:" <
輸出:
lambda thread id:9044
lambda thread id:1388
lambda thread id:7984
lambda thread id:7144
lambda thread id:7176
main thread id:6264
請按任意鍵繼續. . .
3.sleep_for,讓執行緒睡一會
#include "stdafx.h"
#include using namespace std;
#include #include #include int _tmain(int argc, _tchar* argv)
});thread thread2([&mutexvar]();
fun();//呼叫lambda函式
mutexvar.unlock();}})
);}
for (auto& threadvar:threads)
cout << "main thread id:" << this_thread::get_id() << endl;
cout << "ntextnum:" << ntextnum << endl;
return 0;
}
輸出:
main thread id:1760
ntextnum:50000
請按任意鍵繼續. . .
如果遮蔽lock(),輸出值ntextnum<50000,共享資料操作應該使用mutex。 C 11 併發 多執行緒
通常情況下,原子操作是通過互斥 mutual exclusive 的訪問來保證的。linux下借助posix標準的pthread庫的互斥鎖 include include using namespace std static long long total 0 pthread mutex t m p...
C 11併發程式設計 多執行緒std thread
c 11引入了thread類,大大降低了多執行緒使用的複雜度,原先使用多執行緒只能用系統的api,無法解決跨平台問題,一套 平台移植,對應多執行緒 也必須要修改。現在在c 11中只需使用語言層面的thread可以解決這個問題。所需標頭檔案 thread noexcept 乙個空的std thread...
C 11 多執行緒 併發程式設計總結
建立std thread,一般會繫結乙個底層的執行緒。若該thread還繫結好函式物件,則即刻將該函式執行於thread的底層執行緒。執行緒相關的很多預設是move語義,因為在常識中線程複製是很奇怪的行為。joinable 是否可以阻塞至該thread繫結的底層執行緒執行完畢 倘若該thread沒有...