繼續c++11的std::thread之旅!
下面討論如何給執行緒傳遞引數
這個例子是傳遞乙個string
#include
#include
#include
void thread_function(std::string s)
int main()
如果執行,我們可以從輸出結果看出傳遞成功了。
良好程式設計習慣的人都知道 傳遞引用的效率更高,那麼我們該如何做呢?
你也許會這樣寫:
void thread_function(std::string &s)
事實上, 依然是按值傳遞而不是引用。為了達到目的,我們可以這麼做:
std:
:thread t(&thread_function, std:
:ref(s));
這不是唯一的方法:
我們可以使用move():
std:
:thread t(&thread_function, std:
:move(s));
接下來呢,我們就要將一下執行緒的複製吧!!
以下**編譯通過不了:
#include
#include
void thread_function()
int main()
但是別著急,稍稍修改:
include #include
void thread_function()
int main()
大功告成!!!
再聊乙個成員函式吧std::thread::get_id();
int main()
output:
thread function message is = kathy perry
main thread message =
main thread id =
1208
child thread id =
5224
聊一聊std::thread::hardware_concurrency()
獲得當前多少個執行緒:
int main()
//輸出:
number of threads = 2
之前介紹過c++11的lambda表示式
我們可以這樣使用:
int main()
);std::cout
<< "main thread\n";
t.join(); // main thread waits for t to finish
return
0;}
c 11特性之std thread 高階
部落格 c 11特性之std thread 初識 std thread 講了std thread join和std thread detach的用法。今天就再來點深入的。先看看這個 int main 一旦 detached,就不能再join 這個時候總要有新東西出場了 joinable includ...
C 11併發程式設計 多執行緒std thread
c 11引入了thread類,大大降低了多執行緒使用的複雜度,原先使用多執行緒只能用系統的api,無法解決跨平台問題,一套 平台移植,對應多執行緒 也必須要修改。現在在c 11中只需使用語言層面的thread可以解決這個問題。所需標頭檔案 thread noexcept 乙個空的std thread...
C 11多執行緒std thread建立方式
include include include include include include using namespace std pragma region c 11 thread基本建立方法 if 1 案例一 void my print 案例二 class ta ta 案例二 void op...