C 11 多執行緒程式設計 執行緒的建立

2021-07-22 05:09:52 字數 2052 閱讀 8665

1 通過函式指標建立執行緒

#includevoid counter(int id,int numiterations)

///過載()操作符

void operator()()const

}};int main()

; 建構函式不含引數

// std::thread t2(counter()); 將導致編譯錯誤,c++會將std::thread t2(counter()) 解釋為函式宣告

std::thread t2(counter(2, 5));

// 方式3 使用{} 而非()

std::thread t3;

t1.join();

t2.join();

t3.jion();

return 0;

}/*可能的執行結果*/

/*counter 1 has value0

counter 3 has value0

counter 2 has value0

counter 3 has value1

counter 3 has value2

counter 3 has value3

counter 2 has value1

counter 2 has value2

counter 1 has value1

counter 1 has value2

counter 3 has value4

counter 1 has value3

counter 2 has value3

counter 1 has value4

counter 2 has value4

counter 1 has value5

counter 1 has value6

counter 1 has value7

counter 1 has value8

counter 1 has value9

*/

通過lambda 建立執行緒

#include "stdafx.h"

#include #includeint main()

}, 1, 5

);t1.join();

return 0;

}/*執行結果*/

//counter 1 has value0

//counter 1 has value1

//counter 1 has value2

//counter 1 has value3

//counter 1 has value4

4 通過成員函式建立

#include "stdafx.h"

#include#include// request 類

class request

void process()

};int main()

可以在不同的物件中執行某個物件的乙個方法。如果有其他執行緒訪問同乙個物件,需要確認這種訪問時執行緒安全的,以避免競爭條件。

該如何處理這個執行緒的結束?

一種方式是等待這個執行緒結束,在乙個合適的地方呼叫 thread 例項的 join() 方法,呼叫者執行緒將會一直等待著目標執行緒的結束,當目標執行緒結束之後呼叫者執行緒繼續執行;另乙個方式是將這個執行緒分離,由其自己結束,通過呼叫 thread 實       例的 detach() 方法將目標執行緒置於分離模式。乙個執行緒的 join() 方法與 detach() 方法只能呼叫一次,不能在呼叫了 join() 之後又呼叫 detach(),也不能在呼叫 detach() 之後又呼叫 join(),在呼叫了 join() 或者 detach() 之後,該執行緒的 id 即被置為預設值(空執行緒),表示不能繼續再對該執行緒作修改變化。如果沒有呼叫 join() 或者 detach(),那麼,在析構的時候,該執行緒例項將會呼叫 std::terminate(),這會導致整個程序退出,所以,如果沒有特別需要,一般都建議在生成子執行緒後呼叫其 join() 方法等待其退出,這樣子最起碼知道這些子執行緒在什麼時候已經確保結束。

多執行緒(c 11) 建立執行緒

c 11 中建立執行緒非常簡單 include include using namespace std void thread func void thread func2 int i int main int argc,tchar argv thread t2 return 0 首先包含標頭檔案,...

C 11多執行緒程式設計

1 c 11新標準引入了五個標頭檔案支援多執行緒程式設計,分別如下 該標頭檔案 該標頭檔案主要宣告了std thread類,其中std this thread 提供了一些輔助函式 命名空間也在該標頭檔案中 該標頭檔案主要宣告了std atomic和std atomic flag兩個類,另外還宣告了一...

c 11多執行緒併發程式設計學習 5 建立多執行緒

一.建立多個執行緒 1 include2 include3 include4 include5 using namespace std 6 7 void fun int i 執行緒執行函式 8 20 21 等待所有子執行緒結束,使用迭代器很方便 22 for auto iter threads.be...