1. 程式人生 > 其它 >C++多執行緒學習(一)

C++多執行緒學習(一)

(一)幾個基礎的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();