void hello(const string& str2)
}void main()
sleep(9999);
}
首先我們分析一段這段**,區域性變數str1作為引用傳參,傳入執行緒t,在hello裡面不停輸出str2。主線程等待999s。這時str1肯定已經在主線程析構了,那麼執行緒報錯了嗎?
答案是沒有,除錯發現,傳入的str2和str1的位址並不相同。
讓我們再寫乙個測試程式
struct mytest
~mytest()
mytest(mytest&)
int i;
};void hello(mytest& my2)
}void main()
sleep(9999);
}
猜猜輸出了什麼?
constructor
copy construct
copy construct
copy construct
destructor0
destructor
destructor12
3
嘿嘿,發現了,這呼叫的都是拷貝建構函式,所以給c++執行緒物件thread傳遞引用會呼叫拷貝建構函式,而不會引用傳參。
原因是,thread傳入的引數並不知道你傳入的是引用還是右值,需要用std::ref顯式地指明。
C 11多執行緒程式設計
1 c 11新標準引入了五個標頭檔案支援多執行緒程式設計,分別如下 該標頭檔案 該標頭檔案主要宣告了std thread類,其中std this thread 提供了一些輔助函式 命名空間也在該標頭檔案中 該標頭檔案主要宣告了std atomic和std atomic flag兩個類,另外還宣告了一...
C 11併發程式設計 01(執行緒的啟動 傳參)
啟動乙個執行緒 include include int main mythread.join return 0 執行結果 thread starting this is a new thread 要點 std thread的構造可傳入一切callable物件,如 普通函式 lambda 函式指標 b...
c 11 多執行緒程式設計 原子
以下是我關於c 11多執行緒程式設計的學習體會,希望大家多指正 目的 1 原子型別的引入意味著不需要額外的同步機制就可以執行併發的讀寫操作。2 原子操作的確可以作為解決共享資料引起的問題的一種有效的手段。示例 已在vs2015 編譯通過 test atomic 1.cpp 定義控制台應用程式的入口點...