C++多執行緒學習(一)
阿新 • • 發佈:2022-01-08
(一)幾個基礎的thread函式
(1) thread 執行緒名(函式入口) //建立了執行緒,執行緒執行起點入口為函式,執行緒開始執行。
(2) join():阻塞,阻塞主執行緒,讓主執行緒等待子執行緒執行完畢,然後子執行緒和主執行緒匯合完畢,主執行緒往下去走。
(3) detach():分離主執行緒和子執行緒。使用時應當注意
a.若傳遞臨時物件,一定要注意,避免主執行緒結束了,子執行緒還在呼叫臨時物件。
b.如果傳遞類物件,避免隱式型別轉換。全部都在建立執行緒這一行就構建出臨時物件來。
(4) joinable():判斷是否可以成功使用join()或者detach(),返回true或者false
(二)構造一個執行緒的方式
(1)直接使用函式建立
#include <iostream> #include <thread> using namespace std; void myPrint() { cout << "我的執行緒開始執行" << endl; cout << "我的執行緒執行完畢" << endl; return; } int main() { thread myThread(myPrint); myThread.join(); if (myThread.joinable()) { cout<< "可以呼叫可以呼叫join()或者detach()" << endl; } else { cout << "不能呼叫可以呼叫join()或者detach()" << endl; } cout << "Hello World!" << endl; return 0; }
(2)呼叫仿函式建立
class Ta { public: void operator()() //不能帶引數 { cout << "我的執行緒開始執行" << endl; //------------- //------------- cout << "我的執行緒執行完畢" << endl; } }; //main函式裡的: Ta ta; thread myThread(ta); myThread.join();
(3)lambda表示式建立
//main函式中 auto lambdaThread = [] { cout << "我的執行緒開始執行了" << endl; //------------- //------------- cout << "我的執行緒開始執行了" << endl; }; thread myThread(lambdaThread); myThread.join();