c++11引入了thread類,大大降低了多執行緒使用的複雜度,原先使用多執行緒只能用系統的api,無法解決跨平台問題,一套**平台移植,對應多執行緒**也必須要修改。現在在c++11中只需使用語言層面的thread可以解決這個問題。
所需標頭檔案
thread() noexcept
乙個空的std::thread執行物件
template
explicit thread(fn&& fn, args&&... args);
建立std::thread執行物件,執行緒呼叫threadfun函式,函式引數為args。
void threadfun(int a)
thread t1(threadfun, 2);
thread(const thread&) = delete;
拷貝建構函式被禁用,std::thread物件不可拷貝構造
void threadfun(int& a)
int value = 2;
thread t1(threadfun, std::ref(value));
thread(thread&& x)noexcept
呼叫成功原來x不再是std::thread物件
void threadfun(int& a)
int value = 2;
thread t1(threadfun, std::ref(value));
thread t2(std::move(t1));
t2.join();
獲取執行緒id,返回型別std::thread::id物件。
thread t1(threadfun);
thread::id threadid = t1.get_id();
cout << "執行緒id:" << threadid << endl;
//threadid轉換成整形值,所需標頭檔案ostringstream oss;
oss << t1.get_id();
string strid = oss.str();
unsigned long long tid = stoull(strid);
cout << "執行緒id:" << tid << endl;
建立執行緒執行執行緒函式,呼叫該函式會阻塞當前執行緒,直到執行緒執行完join才返回。
thread t1(threadfun);
t1.join() //阻塞等待
detach呼叫之後,目標執行緒就成為了守護執行緒,駐留後台執行,與之關聯的std::thread物件失去對目標執行緒的關聯,無法再通過std::thread物件取得該執行緒的控制權。
交換兩個執行緒物件
thread t1(threadfun1);
thread t2(threadfun2);
cout << "執行緒1的id:" << t1.get_id() << endl;
cout << "執行緒2的id:" << t2.get_id() << endl;
t1.swap(t2);
cout << "執行緒1的id:" << t1.get_id() << endl;
cout << "執行緒2的id:" << t2.get_id() << endl;
獲得邏輯處理器儲量,返回值為int型
int corenum = thread::hardware_concurrency();
void threadfun1()
int main()
void threadfun1(int v)
int main()
需要注意,變數int value 和int v 做變數傳遞時並不是引用,而是對變數做了拷貝,所以在傳遞給int v前,int value不能出作用域(釋放了記憶體),join(),可以保證int value變數釋放記憶體,如果使用detach(),可能存在這種情況。
C 11 多執行緒 併發程式設計總結
建立std thread,一般會繫結乙個底層的執行緒。若該thread還繫結好函式物件,則即刻將該函式執行於thread的底層執行緒。執行緒相關的很多預設是move語義,因為在常識中線程複製是很奇怪的行為。joinable 是否可以阻塞至該thread繫結的底層執行緒執行完畢 倘若該thread沒有...
C 11併發程式設計 多執行緒std thread
一 概述 c 11引入了thread類,大大降低了多執行緒使用的複雜度,原jtpbyn先使用多執行緒只能用系統的api,無法解決跨平台問題,一套 平台移植,對應多執行緒 也必須要修改。現在在c 11中只需使用語言層面的thread可以解決這個問題。所需標頭檔案 二 建構函式 1.預設建構函式 2.初...
C 11 併發 多執行緒
通常情況下,原子操作是通過互斥 mutual exclusive 的訪問來保證的。linux下借助posix標準的pthread庫的互斥鎖 include include using namespace std static long long total 0 pthread mutex t m p...