




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++學(xué)習(xí)之線程詳解目錄開(kāi)篇線程的狀態(tài)多線程的構(gòu)建計(jì)算時(shí)間一、程序運(yùn)行時(shí)間二、chrono共享資源和互斥鎖condition_variable線程池總結(jié)
開(kāi)篇
多線程是開(kāi)發(fā)中必不可少的,往往我們需要多個(gè)任務(wù)并行,就需要多線程開(kāi)發(fā);就好比圖像檢測(cè)和圖像結(jié)果的處理,這就是一個(gè)可閉環(huán)的任務(wù),用多線程是可以加速這個(gè)任務(wù)的;
線程的狀態(tài)
就緒態(tài):線程能夠運(yùn)行,正在等待處理機(jī)資源;
運(yùn)行態(tài):正在運(yùn)行,可能有多個(gè)線程處于運(yùn)行態(tài);
阻塞態(tài):線程由于等待某些條件而無(wú)法運(yùn)行,例如IO、鎖、互斥量等;
終止態(tài):線程從起始函數(shù)返回或被取消;
多線程的構(gòu)建
有三種方式可以構(gòu)建多線程,前提是都需要引入pthread.h這個(gè)頭文件;
1、函數(shù);
2、仿函數(shù);
3、Lambda表達(dá)式;
三者的本質(zhì)都是在調(diào)用函數(shù);
//函數(shù)方式
voidfun(strings){
coutsendl;
cout"firstthreadprogramm"sendl;
intmain(){
strings="Hellworld";
threadth=thread(fun,s);
th.join();
上面代碼為最簡(jiǎn)單線程的一個(gè)構(gòu)造;
join函數(shù)是一個(gè)等待線程完成函數(shù),主線程需要等待子線程運(yùn)行結(jié)束才可以結(jié)束;還有一個(gè)detach的函數(shù),會(huì)讓線程在后臺(tái)運(yùn)行,需要等到程序退出才結(jié)束;
計(jì)算時(shí)間
計(jì)算時(shí)間在這里介紹兩種方式:
一、程序運(yùn)行時(shí)間
longn=0;
clock_tstart,finish;
start=clock();
while(n1000000000)
n++;
finish=clock();
printf("spendtime%fs\n",(double)(finish-start)/CLOCKS_PER_SEC);
printf("spendtime%fms\n",(double)(finish-start)/1000);
這種方式和系統(tǒng)時(shí)間無(wú)關(guān),一般用來(lái)調(diào)試時(shí)打印時(shí)間;
二、chrono
#includechrono
//方式三chrono
std::chrono::system_clock::time_pointCstart=std::chrono::system_clock::now();//系統(tǒng)時(shí)間
//std::chrono::steady_clock::time_pointCstart=std::chrono::steady_clock::now();//穩(wěn)定時(shí)間
longn=0;
while(n1000000000)n++;
std::chrono::system_clock::time_pointCend=std::chrono::system_clock::now();//系統(tǒng)時(shí)間
std::chrono::durationfloatspend_time=Cend-Cstart;
coutspend_time.count()endl;
這個(gè)方式用系統(tǒng)時(shí)間進(jìn)行計(jì)算,在實(shí)際程序中用這個(gè)方式;
共享資源和互斥鎖
關(guān)于互斥鎖的概念,引用這篇博主的講解:文章
引入互斥鎖原因:當(dāng)有兩個(gè)線程共享一塊資源時(shí),容易造成沖突,也就是上個(gè)線程還沒(méi)結(jié)束就進(jìn)行下個(gè)線程,舉個(gè)例子就是讀寫操作,添加互斥鎖可以很好的解決這個(gè)沖突問(wèn)題;
互斥鎖是個(gè)簡(jiǎn)單的加鎖方法,互斥鎖只有兩種狀態(tài):上鎖(lock)和解鎖(unlock);
互斥鎖特點(diǎn):
1、原子性:把一個(gè)互斥量鎖定為一個(gè)原子操作,這意味著如果一個(gè)線程鎖定了一個(gè)互斥量,沒(méi)有其他線程在同一時(shí)間可以成功鎖定這個(gè)互斥量;
2、唯一性:如果一個(gè)線程鎖定了一個(gè)互斥量,在它解除鎖定之前,沒(méi)有其他線程可以鎖定這個(gè)互斥量;
3、非繁忙等待:如果一個(gè)線程已經(jīng)鎖定了一個(gè)互斥量,第二個(gè)線程又試圖去鎖定這個(gè)互斥量,則第二個(gè)線程將被掛起(不占用任何cpu資源),直到第一個(gè)線程解除對(duì)這個(gè)互斥量的鎖定為止,第二個(gè)線程則被喚醒并繼續(xù)執(zhí)行,同時(shí)鎖定這個(gè)互斥量。
互斥鎖的使用:
mutexmtx;//創(chuàng)建互斥鎖對(duì)象
mtx.lock();
g_pcm_elapseds.push_back(std::make_pair(pcm_data,elapsed));//執(zhí)行語(yǔ)句
mtx.unlock();
condition_variable
condition_variable條件變量可以阻塞(wait)調(diào)用的線程直到使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025小學(xué)一年級(jí)個(gè)性化學(xué)習(xí)計(jì)劃
- 《歷史時(shí)期人物故事欣賞與探究教案》
- 基于BIM的城市規(guī)劃與設(shè)計(jì)方法研究-洞察闡釋
- 2025年中國(guó)肌氨酸項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 技術(shù)與意識(shí)-人工智能時(shí)代的哲學(xué)新解-洞察闡釋
- 我們的民族小學(xué)讀后感450字(7篇)
- 軍訓(xùn)感悟作文700字11篇范文
- 疫情影響下的特殊教育課程計(jì)劃
- 物理化學(xué)《量子力學(xué):高中物理實(shí)驗(yàn)課程教案》
- 進(jìn)口葡萄酒銷售代理合同書
- 醫(yī)院培訓(xùn)課件:《分級(jí)護(hù)理制度》
- 外國(guó)建筑賞析智慧樹(shù)知到期末考試答案章節(jié)答案2024年清華大學(xué)
- 抑郁障礙課件
- 2024屆湖南省瀏陽(yáng)市中考聯(lián)考化學(xué)試卷含解析
- 北京奧林匹克森林公園植物景觀與生態(tài)效益初探
- 交流與傳承-東西文化中碰撞中的藝術(shù)嬗變
- 四年級(jí)美術(shù) 《熱鬧的集市》課件“十市聯(lián)賽”一等獎(jiǎng)
- 工業(yè)數(shù)據(jù)采集技術(shù)及應(yīng)用 - 規(guī)劃生產(chǎn)數(shù)據(jù)采集方案
- 消除艾滋病、梅毒和乙肝母嬰傳播信息管理方案
- 維修類技能培訓(xùn)課件
- 基于ABB工業(yè)機(jī)器人自動(dòng)化搬運(yùn)工作站的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論