中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

民房做酒店出租網(wǎng)站app南寧seo推廣外包

民房做酒店出租網(wǎng)站app,南寧seo推廣外包,全國(guó)工程信息平臺(tái),那個(gè)網(wǎng)站做足球測(cè)???&#x1f308;大家好&#xff01;本篇文章主要整理了部分多線程相關(guān)的內(nèi)容重點(diǎn)&#x1f607;。首先講解了多進(jìn)程和多線程并發(fā)的區(qū)別以及各自優(yōu)缺點(diǎn)&#xff0c;之后講解了Thead線程庫(kù)的基本使用。 本專欄知識(shí)點(diǎn)是通過<零聲教育>的音視頻流媒體高級(jí)開發(fā)課程進(jìn)行系統(tǒng)…

???🌈大家好!本篇文章主要整理了部分多線程相關(guān)的內(nèi)容重點(diǎn)😇。首先講解了多進(jìn)程和多線程并發(fā)的區(qū)別以及各自優(yōu)缺點(diǎn),之后講解了Thead線程庫(kù)的基本使用。


本專欄知識(shí)點(diǎn)是通過<零聲教育>的音視頻流媒體高級(jí)開發(fā)課程進(jìn)行系統(tǒng)學(xué)習(xí),梳理總結(jié)后寫下文章,對(duì)音視頻相關(guān)內(nèi)容感興趣的讀者,可以點(diǎn)擊觀看課程網(wǎng)址:零聲教育


🎡導(dǎo)航小助手🎡

    • 一、多進(jìn)程與多線程
    • 二、Thead線程庫(kù)的基本使用
    • 三、小結(jié)

一、多進(jìn)程與多線程

首先有一個(gè)直觀的理解:
??1.進(jìn)程就是運(yùn)行中的程序
??2.線程就是進(jìn)程中的進(jìn)程

操作系統(tǒng)中可以有多個(gè)進(jìn)程,一個(gè)進(jìn)程中也可以有多個(gè)線程。

1.1 多線程并發(fā)
多進(jìn)程并發(fā)是將一個(gè)應(yīng)用程序劃分為多個(gè)獨(dú)立的進(jìn)程(每個(gè)進(jìn)程只有一個(gè)線程),這些獨(dú)立的進(jìn)程之間相互可以通信,共同完成任務(wù)。操作系統(tǒng)常常對(duì)進(jìn)程提供大量的保護(hù)機(jī)制避免出現(xiàn)一個(gè)進(jìn)程修改其他進(jìn)程的數(shù)據(jù),因此,相對(duì)于多線程,使用多進(jìn)程更容易寫出相對(duì)安全的代碼。但這也造成了多進(jìn)程并發(fā)存在兩個(gè)不足之處

  1. 進(jìn)程間的通信,無(wú)論是使用信號(hào)、套接字、還是文件、管道等方式,其使用要么比較復(fù)雜,要么就是速度較慢或者兩者兼而有之。
  2. 運(yùn)行多個(gè)線程,需要操作系統(tǒng)花費(fèi)很多資源進(jìn)行管理。

在多個(gè)進(jìn)程并發(fā)完成一個(gè)任務(wù)時(shí),常會(huì)出現(xiàn)操作同一個(gè)數(shù)據(jù)以及進(jìn)程之間的相互通信,因此,多進(jìn)程并發(fā)不是一個(gè)很好的選擇。
1.2 多線程并發(fā)
多線程并發(fā):同一個(gè)進(jìn)程中執(zhí)行多個(gè)線程。

  • 優(yōu)點(diǎn):線程是輕量級(jí)的進(jìn)程,每個(gè)線程可以獨(dú)立的運(yùn)行不同的指令序列,且線程不獨(dú)立擁有資源,依賴于創(chuàng)建它的進(jìn)程而存在。
    同一進(jìn)程中的多個(gè)線程能夠很方便的進(jìn)行數(shù)據(jù)共享以及通信,比進(jìn)程更適用于并發(fā)操作。
    不足:缺少操作系統(tǒng)提供的保護(hù)機(jī)制。在多線程共享數(shù)據(jù)及通信時(shí),需程序員做更多的操作,并且還需極力避免死鎖

二、Thead線程庫(kù)的基本使用

2.1 創(chuàng)建線程
要?jiǎng)?chuàng)建線程,我們需要一個(gè)可調(diào)用函數(shù)或函數(shù)對(duì)象,作為線程的入口點(diǎn)。
在C++11中,我們可以使用函數(shù)指針、函數(shù)對(duì)象lambda表達(dá)式來實(shí)現(xiàn)。
創(chuàng)建線程的基本語(yǔ)法如下:

#include <thread>std::thread t(function_name, args...);
  • function_name是線程入口點(diǎn)的函數(shù)或可調(diào)用對(duì)象
  • args...是傳遞給函數(shù)的參數(shù)
    創(chuàng)建線程后,我們可以使用t.join()等待線程完成,或者使用t.detach()分離線程,讓它在后臺(tái)運(yùn)行。
    實(shí)例1:
	#include <iostream>#include <thread>using namespace std;void doit() { cout << "World!" << endl; }int main() {thread a([] {cout << "Hello, " << flush;}), b(doit);a.join();b.join();return 0;}

運(yùn)行結(jié)果:
在這里插入圖片描述
在這里插入圖片描述
上面兩次結(jié)果并不相同,這是因?yàn)槎嗑€程運(yùn)行時(shí)是以異步方式執(zhí)行的,與我們平時(shí)寫的同步方式不同。異步方式可以同時(shí)執(zhí)行多條語(yǔ)句誰(shuí)先執(zhí)行得快,誰(shuí)先執(zhí)行完。
實(shí)例2:

	#include <iostream>#include <thread>using namespace std;void thread_1(){cout<<"線程t"<<endl;}void print_message(const string& message) {    cout << message <<endl;cout << "線程 t" << endl;}void increment(int& x) {   ++x;cout << "線程 t2" << endl;}int main() {  cout << "主線程1\n";thread t(thread_1);// 開啟線程t,調(diào)用:thread_1()t.join();cout << "子線程t結(jié)束\n";string message = "Hello, world!";    thread t1(print_message, message);// 開啟線程t1,調(diào)用:print_message()t1.join();   int x = 0;   thread t2(increment, ref(x));//開啟線程t1,調(diào)用:increment() t2.join(); cout << "子線程t2結(jié)束\n";cout << x << endl;    cout << "全部子進(jìn)程結(jié)束\n";return 0;}

運(yùn)行結(jié)果:
在這里插入圖片描述
從上面結(jié)果,我們很明顯能看出,使用t.join()后程序需要等待進(jìn)程t結(jié)束后,才會(huì)接著進(jìn)行。
注意:thread在傳遞參數(shù)時(shí),是以右值傳遞的。
我們?cè)?strong>傳遞引用的時(shí)候,需要用到std::ref和std::cref

  • std::ref 可以包裝按引用傳遞的值。
  • std::cref 可以包裝按const引用傳遞的值。

2.2 join與detach方式
當(dāng)線程啟動(dòng)后,一定要在和線程相關(guān)聯(lián)的thread銷毀前,確定以何種方式等待線程執(zhí)行結(jié)束。比如上
例中的join。
? detach方式,啟動(dòng)的線程自主在后臺(tái)運(yùn)行,當(dāng)前的代碼繼續(xù)往下執(zhí)行,不等待新線程結(jié)束。
? join方式,等待啟動(dòng)的線程完成,才會(huì)繼續(xù)往下執(zhí)行。
可以使用joinable判斷是join模式還是detach模式。

示例1:join舉例

	#include <iostream>#include <thread>using namespace std;void thread_1() {while (1) {cout<<"子線程1"<<endl;}}void thread_2(int x) {while (1) {cout<<"子線程2"<<endl;}}int main() {thread first(thread_1);// 開啟線程,調(diào)用:thread_1()thread second(thread_2, 100);// 開啟線程,調(diào)用:thread_2(100)first.join(); // pauses until first finishes 這個(gè)操作完了之后才能destroyedsecond.join(); // pauses until second finishes//join完了之后,才能往下執(zhí)行。while (1) {std::cout << "主線程\n";}return 0;}

在這里插入圖片描述
線程1和線程2寫的是死循環(huán),那么在兩個(gè)子線程沒結(jié)束前,主線程不會(huì)執(zhí)行。

示例2:detach舉例

	#include <iostream>#include <thread>using namespace std;void thread_1() {while (1) {cout<<"子線程1"<<endl;}}void thread_2(int x) {while (1) {cout<<"子線程2"<<endl;}}int main() {thread first(thread_1);// 開啟線程,調(diào)用:thread_1()thread second(thread_2, 100);// 開啟線程,調(diào)用:thread_2(100)first.join(); // pauses until first finishes 這個(gè)操作完了之后才能destroyedsecond.join(); // pauses until second finishes//join完了之后,才能往下執(zhí)行。while (1) {std::cout << "主線程\n";}return 0;}

運(yùn)行結(jié)果:
在這里插入圖片描述
在這里插入圖片描述可以看出,主線程不會(huì)等待子線程1和2結(jié)束。如果主線程運(yùn)行結(jié)束,程序則結(jié)束。
2.3 joinable
joinable()返回一個(gè)bool值,判斷是join模式還是detach模式。
使用方法;

	if (myThread.joinable()) 1 foo.join();

三、小結(jié)

  1. 多進(jìn)程安全但是浪費(fèi)操作系統(tǒng)資源且進(jìn)程間相互通信比較麻煩。多線程則可以很好的處理這兩個(gè)問題,但是使用時(shí)需要使用更多操作確保安全。
  2. C++11提供了語(yǔ)言層面上的多線程,包含在頭文件中。它解決了跨平臺(tái)的問題,提供了管理線程、保護(hù)共享數(shù)據(jù)、線程間同步操作、原子操作等類。主要講解了Thead線程庫(kù)的基本使用,包括join()、joinable()和detach(),并舉了很多例子進(jìn)行補(bǔ)充。

感謝大家閱讀!
接下來還會(huì)繼續(xù)更新多線程相關(guān)知識(shí),感興趣的可以看其他筆記!

http://www.risenshineclean.com/news/57643.html

相關(guān)文章:

  • 做購(gòu)物網(wǎng)站寫數(shù)據(jù)庫(kù)的流程天津seo推廣
  • 蘭州網(wǎng)站分類導(dǎo)航seo北京公司
  • 建設(shè)閱讀網(wǎng)站的研究意義武漢網(wǎng)站排名提升
  • 廈門php網(wǎng)站建設(shè)無(wú)排名優(yōu)化
  • 網(wǎng)站制作服務(wù)合同seo學(xué)習(xí)
  • wordpress做論壇網(wǎng)站百度指數(shù)網(wǎng)址是多少
  • 北京做網(wǎng)站企業(yè)友情鏈接源碼
  • 網(wǎng)站建設(shè)的詳細(xì)步驟電子商務(wù)網(wǎng)頁(yè)制作
  • 做網(wǎng)站大概要多少錢微商營(yíng)銷
  • 長(zhǎng)沙響應(yīng)式網(wǎng)站設(shè)計(jì)有哪些優(yōu)化營(yíng)商環(huán)境發(fā)言材料
  • win7本機(jī)做網(wǎng)站微信朋友圈廣告在哪里做
  • 做鋼化膜網(wǎng)站長(zhǎng)沙seo優(yōu)化
  • 大連裝修公司哪家口碑最好深圳搜索引擎優(yōu)化收費(fèi)
  • 知道ip域名如何進(jìn)入網(wǎng)站如何推廣一款app
  • 愛潤(rùn)妍網(wǎng)站開發(fā)河南企業(yè)網(wǎng)站推廣
  • 室內(nèi)設(shè)計(jì)畢業(yè)設(shè)計(jì)代做網(wǎng)站seo是搜索引擎營(yíng)銷
  • 重慶大渡口營(yíng)銷型網(wǎng)站建設(shè)公司哪家專業(yè)win7系統(tǒng)優(yōu)化軟件
  • 公司做網(wǎng)站費(fèi)用上海seo網(wǎng)站策劃
  • 柳北網(wǎng)站制作網(wǎng)上推廣賺錢項(xiàng)目
  • 惠州網(wǎng)站建設(shè) 英語(yǔ)太原百度網(wǎng)站快速排名
  • 免費(fèi)網(wǎng)站訪客qq統(tǒng)計(jì)系統(tǒng)今日最新聞
  • 靈山網(wǎng)站建設(shè)seo點(diǎn)擊排名軟件哪里好
  • 淘寶客怎樣做網(wǎng)站網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站平臺(tái)延展性網(wǎng)站優(yōu)化與seo
  • 網(wǎng)站機(jī)房建設(shè)解決方案搜索優(yōu)化是什么意思
  • 響應(yīng)式網(wǎng)站咨詢域名關(guān)鍵詞查詢
  • java做直播網(wǎng)站有哪些網(wǎng)推
  • 2_ 如何寫一份詳細(xì)的網(wǎng)站開發(fā)方案鄭州seo代理外包公司
  • 長(zhǎng)春專業(yè)網(wǎng)站建設(shè)價(jià)格seo核心技術(shù)排名
  • 淄博網(wǎng)站建設(shè)方案免費(fèi)制作網(wǎng)站app