多執行緒的建立

2022-06-08 22:45:19 字數 1238 閱讀 1270

#include
join()主要是指當建立子執行緒後,子執行緒執行,主線程要在某個地方等待子執行緒執行完畢。

detach() 建立子執行緒後,子執行緒與主線程分離稱為守護執行緒,它的資源之內的東西,由系統管理。

使用detach()時,要避免使用主線程中的引用,指標之內的東西。否則當主線程釋放相應資源時,子執行緒可能出現未知的bug。

*** join() 與detach()*** 不能同時使用。

joinable() 主要用於判斷當前位置是否能夠使用join() 或者 detach(), 返回值為true或者false

1. 函式方式

#include "pch.h"

#include #include using namespace std;

void myprintf()

int main()

;int main()

return 0;

}

注意在使用detach() 時不要在類中使用與主線程相關的引用和指標

當主線程結束時相應的資源被釋放,而守護執行緒是引用主線程的資源,這樣可能會出現未知的bug.

問題2. 當使用detach()時,傳的類會有影響嗎?

不會的,類在使用執行緒時,會呼叫複製建構函式

2. lambda

auto lamdathread = ;

thread mythread3(lamdathread);

mythread3.join();

使用lambda函式建立執行緒還可以避免這樣一種情況。
class a

};int main()

注意這裡的情況std::thread my_thread(a());,這裡會把這a()是乙個右值,這裡可能把這個當成乙個函式定義,函式名是my_thread 引數是乙個a物件,返回是乙個std::thread

避免這種情況可以再加一對括號std::thread my_thread((a()));或者寫成lambda函式。

3.類物件內部使用某個子成員函式建立執行緒

這種情況通常會加上this引數

class a

void do_other_thing

};

類外使用記得建立物件,或將使用的函式申明成static
int main()

多執行緒的建立

每乙個程序都必須有乙個主線程,在主線程中我們可以建立多個執行緒。建立執行緒的方法有以下幾種 一 繼承thread類 這種方法需要重寫run方法,非常簡單,但同時會使 結構混亂而且降低可讀性。package p1 public class mythread extends thread 通過宣告建立的...

建立多執行緒

多執行緒 乙個程式可以同時執行多個任務,每個任務由 乙個單獨的 執行緒完成,可提高程式執行速度和處理速度 執行緒為程式執行的基本單位 2.建立乙個執行緒類的物件。threaddemo1 td new threaddemo1 3.啟動執行緒執行 td.start 1.建立實現runable介面的雷,並...

執行緒的建立與多執行緒

多執行緒執行緒建立的方式 一 使用此方式建立的執行緒為守護執行緒 import thread import threading deffn1 a,b print a,b print threading.current thread name defcreate thread1 引數一 在子執行緒中要...