c 11特性之std thread 高階二

2021-07-06 09:53:27 字數 1561 閱讀 7058

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