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
*/
3
通過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...