最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++學(xué)習(xí)之線程詳解

2022-02-21 15:07 作者:后端攻城獅哇  | 我要投稿

多線程是開發(fā)中必不可少的,往往我們需要多個任務(wù)并行,就需要多線程開發(fā);就好比圖像檢測和圖像結(jié)果的處理,這就是一個可閉環(huán)的任務(wù),用多線程是可以加速這個任務(wù)的;

線程的狀態(tài)

就緒態(tài):線程能夠運行,正在等待處理機資源;

運行態(tài):正在運行,可能有多個線程處于運行態(tài);

阻塞態(tài):線程由于等待某些條件而無法運行,例如IO、鎖、互斥量等;

終止態(tài):線程從起始函數(shù)返回或被取消;

多線程的構(gòu)建

有三種方式可以構(gòu)建多線程,前提是都需要引入pthread.h這個頭文件;

1、函數(shù);

2、仿函數(shù);

3、Lambda表達(dá)式;

三者的本質(zhì)都是在調(diào)用函數(shù);

上面代碼為最簡單線程的一個構(gòu)造;

join函數(shù)是一個等待線程完成函數(shù),主線程需要等待子線程運行結(jié)束才可以結(jié)束;還有一個detach的函數(shù),會讓線程在后臺運行,需要等到程序退出才結(jié)束;

計算時間

計算時間在這里介紹兩種方式:

一、程序運行時間

這種方式和系統(tǒng)時間無關(guān),一般用來調(diào)試時打印時間;

二、chrono

這個方式用系統(tǒng)時間進(jìn)行計算,在實際程序中用這個方式;

共享資源和互斥鎖

引入互斥鎖原因:當(dāng)有兩個線程共享一塊資源時,容易造成沖突,也就是上個線程還沒結(jié)束就進(jìn)行下個線程,舉個例子就是讀寫操作,添加互斥鎖可以很好的解決這個沖突問題;

互斥鎖是個簡單的加鎖方法,互斥鎖只有兩種狀態(tài):上鎖(lock)和解鎖(unlock);

互斥鎖特點:

1、原子性:把一個互斥量鎖定為一個原子操作,這意味著如果一個線程鎖定了一個互斥量,沒有其他線程在同一時間可以成功鎖定這個互斥量;

2、唯一性:如果一個線程鎖定了一個互斥量,在它解除鎖定之前,沒有其他線程可以鎖定這個互斥量;

3、非繁忙等待:如果一個線程已經(jīng)鎖定了一個互斥量,第二個線程又試圖去鎖定這個互斥量,則第二個線程將被掛起(不占用任何cpu資源),直到第一個線程解除對這個互斥量的鎖定為止,第二個線程則被喚醒并繼續(xù)執(zhí)行,同時鎖定這個互斥量。

互斥鎖的使用:

condition_variable

condition_variable條件變量可以阻塞(wait)調(diào)用的線程直到使用(notify_one或notify_all)通知恢復(fù)為止

使用案例:

線程池

作用:每一個任務(wù)都起一個線程,這樣的效率是不高的,起一個線程池,哪個線程空閑就來處理任務(wù),這樣的結(jié)構(gòu)高效;

實現(xiàn)思想:管理一個任務(wù)隊列,一個線程隊列,然后每次取一個任務(wù)隊列分配給一個線程去做,循環(huán)反復(fù);

這里參考一個Github:https://gitcode.net/mirrors/progschj/threadpool?utm_source=csdn_github_accelerator


C++學(xué)習(xí)之線程詳解的評論 (共 條)

分享到微博請遵守國家法律
通渭县| 信宜市| 冕宁县| 独山县| 城固县| 抚州市| 西充县| 车险| 汉源县| 得荣县| 大竹县| 年辖:市辖区| 栖霞市| 昌黎县| 疏附县| 延川县| 玉溪市| 涿鹿县| 宾川县| 江门市| 仙居县| 博兴县| 冀州市| 望谟县| 潜江市| 乌拉特后旗| 康马县| 平阴县| 石门县| 沭阳县| 报价| 武隆县| 澄城县| 福建省| 海宁市| 来凤县| 南澳县| 伊吾县| 永春县| 饶阳县| 行唐县|