C++中怎么創(chuàng)建線,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
專注于為中小企業(yè)提供網(wǎng)站設計、成都網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)博白免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
并發(fā)、進程、線程的基本概念
并發(fā)兩個或者多個任務(獨立的活動)同時發(fā)生(進行):一個程序通知執(zhí)行多個獨立的任務并發(fā)假象(不是真正的并發(fā)):單核CPU通過上下文切換方式實現(xiàn)進程
進程計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動
進程特性
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
動態(tài)性:進程是程序的一次執(zhí)行過程,是臨時的,有生命期,是動態(tài)產(chǎn)生,動態(tài)消亡的;
并發(fā)性:任何進程都可以同其他進行一起并發(fā)執(zhí)行;
獨立性:進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位;
結(jié)構(gòu)性:進程由程序,數(shù)據(jù)和進程控制塊三部分組成
線程每個進程都有一個主線程并且主線程是唯一的,也就是一個進程只能有一個主線程。vs編譯器中ctr+f5編譯運行程序時,實際是主線程調(diào)用mian函數(shù)中的代碼。線程可以理解為代碼執(zhí)行通道,除了主線程之外,可以自己創(chuàng)建其他線程。
并發(fā)實現(xiàn)方案
主要解決是進程間通信問題
同一電腦上可通過管道,文件,消息隊列,共享內(nèi)存等方式實現(xiàn)
不同電腦可通過socket網(wǎng)絡通信實現(xiàn)
多個進程實現(xiàn)并發(fā)
單獨進程,多個線程實現(xiàn)并發(fā) 即一個主線程,多個子線程實現(xiàn)并發(fā)一個進程中的所有線程共享內(nèi)存空間(共享內(nèi)存),例如全局變量,指針引用等,所以多線程開銷遠遠小于多進程。共享內(nèi)存也會導致數(shù)據(jù)一致性問題(資源競爭問題)。
C++線程編程基本操作
1.首先需要包含thread頭文件
#include#include
2.創(chuàng)建線程: thread類創(chuàng)建一個線程
#includevoid print() { std::cout<<"子線程"< 3.join:加入/匯合線程。阻塞主線程,等待子線程執(zhí)行結(jié)束,可理解為依附功能
#includevoid print() { std::cout<<"子線程"< 4.detach:分離,剝離依附關(guān)系,駐留后臺
#include#include #include void print() { for (int i = 0; i < 10; i++) { std::cout << "子線程"< 注意:一旦detach線程后,便不可再使用join線程。
5.joinable:判斷當前線程是否可以join或deatch,如果可以返回true,不能返回false
#include#include void print() { for (int i = 0; i < 10; i++) { std::cout << "子線程"< 其他創(chuàng)建線程方法
1.用類和對象
#include#include class Function { public: void operator()() { std::cout << "子線程" << std::endl; } }; int main() { Function object; std::thread t1(object); //可調(diào)用對象即可 t1.join(); std::thread t2((Function())); t2.join(); std::cout << "主線程" << std::endl; return 0; } 2.Lambda表達式
#include#include int main() { std::thread t1([] {std::cout << "子線程" << std::endl; }); t1.join(); std::cout << "主線程" << std::endl; return 0; } 3.帶引用參數(shù)創(chuàng)建方式
#include#include #include void printInfo(int& num) { num = 1001; std::cout << "子進程:"< 4.帶智能指針參數(shù)創(chuàng)建方式
#include#include #include void printInfo(std::unique_ptr ptr) { std::cout << "子線程:"< ptr(new int(100)); std::cout << "主線程:" << ptr.get() << std::endl; std::thread t(printInfo,std::move(ptr)); t.join(); std::cout << "主線程:"< 5.類的成員函數(shù)
#include#include #include class MM { public: void print(int& num) { num = 1001; std::cout << "子線程:"< 關(guān)于C++中怎么創(chuàng)建線問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
網(wǎng)站標題:C++中怎么創(chuàng)建線
URL地址:http://weahome.cn/article/gioggh.html