下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C++基于消息隊(duì)列的多線程實(shí)現(xiàn)示例代碼前言
實(shí)現(xiàn)消息隊(duì)列的關(guān)鍵因素是考量不同線程訪問(wèn)消息隊(duì)列的同步問(wèn)題。本實(shí)現(xiàn)涉及到幾個(gè)知識(shí)點(diǎn)
std::lock_guard介紹
std::lock_gurad是C++11中定義的模板類。定義如下:
templateclassMutexclasslock_guard;
lock_guard對(duì)象通常用于管理某個(gè)鎖(Lock)對(duì)象,因此與MutexRAII相關(guān),方便線程對(duì)互斥量上鎖,即在某個(gè)lock_guard對(duì)象的聲明周期內(nèi),它所管理的鎖對(duì)象會(huì)一直保持上鎖狀態(tài);而lock_guard的生命周期結(jié)束之后,它所管理的鎖對(duì)象會(huì)被解鎖(注:類似shared_ptr等智能指針管理動(dòng)態(tài)分配的內(nèi)存資源)。
模板參數(shù)Mutex代表互斥量類型,例如std::mutex類型,它應(yīng)該是一個(gè)基本的BasicLockable類型,標(biāo)準(zhǔn)庫(kù)中定義幾種基本的BasicLockable類型,分別std::mutex,std::recursive_mutex,std::timed_mutex,std::recursive_timed_mutex以及std::unique_lock
std::unique_lock介紹
lock_guard最大的缺點(diǎn)也是簡(jiǎn)單,沒(méi)有給程序員提供足夠的靈活度,因此,C++11標(biāo)準(zhǔn)中定義了另外一個(gè)與MutexRAII相關(guān)類unique_lock,該類與lock_guard類相似,也很方便線程對(duì)互斥量上鎖,但它提供了更好的上鎖和解鎖控制。
顧名思義,unique_lock對(duì)象以獨(dú)占所有權(quán)的方式(uniqueowership)管理mutex對(duì)象的上鎖和解鎖操作,所謂獨(dú)占所有權(quán),就是沒(méi)有其他的unique_lock對(duì)象同時(shí)擁有某個(gè)mutex對(duì)象的所有權(quán)。
新創(chuàng)建的unique_lock對(duì)象管理Mutex對(duì)象m,并嘗試調(diào)用m.lock()對(duì)Mutex對(duì)象進(jìn)行上鎖,如果此時(shí)另外某個(gè)unique_lock對(duì)象已經(jīng)管理了該Mutex對(duì)象m,則當(dāng)前線程將會(huì)被阻塞。
std::condition介紹
當(dāng)std::condition_variable對(duì)象的某個(gè)wait函數(shù)被調(diào)用的時(shí)候,它使用std::unique_lock(通過(guò)std::mutex)來(lái)鎖住當(dāng)前線程。當(dāng)前線程會(huì)一直被阻塞,直到另外一個(gè)線程在相同的std::condition_variable對(duì)象上調(diào)用了notification函數(shù)來(lái)喚醒當(dāng)前線程。
std::condition_variable提供了兩種wait()函數(shù)。當(dāng)前線程調(diào)用wait()后將被阻塞(此時(shí)當(dāng)前線程應(yīng)該獲得了鎖(mutex),不妨設(shè)獲得鎖lck),直到另外某個(gè)線程調(diào)用notify_*喚醒了當(dāng)前線程。
在線程被阻塞時(shí),該函數(shù)會(huì)自動(dòng)調(diào)用lck.unlock()釋放鎖,使得其他被阻塞在鎖競(jìng)爭(zhēng)上的線程得以繼續(xù)執(zhí)行。另外,一旦當(dāng)前線程獲得通知(notified,通常是另外某個(gè)線程調(diào)用notify_*喚醒了當(dāng)前線程),wait()函數(shù)也是自動(dòng)調(diào)用lck.lock(),使得lck的狀態(tài)和wait函數(shù)被調(diào)用時(shí)相同。
在第二種情況下(即設(shè)置了Predicate),只有當(dāng)pred條件為false時(shí)調(diào)用wait()才會(huì)阻塞當(dāng)前線程,并且在收到其他線程的通知后只有當(dāng)pred為true時(shí)才會(huì)被解除阻塞。因此第二種情況類似以下代碼:
while(!pred())wait(lck);
std::function介紹
使用std::function可以將普通函數(shù),lambda表達(dá)式和函數(shù)對(duì)象類統(tǒng)一起來(lái)。它們并不是相同的類型,然而通過(guò)function模板類,可以轉(zhuǎn)化為相同類型的對(duì)象(function對(duì)象),從而放入一個(gè)vector或其他容器里,方便回調(diào)。
代碼實(shí)現(xiàn):
#pragmaonce
#ifndefMESSAGE_QUEUE_H
#defineMESSAGE_QUEUE_H
#includequeue
#includemutex
#includecondition_variable
templateclassType
classCMessageQueue
public:
CMes
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育革新實(shí)驗(yàn)承諾保證承諾書(9篇)
- 2025年文化藝術(shù)活動(dòng)策劃與組織指南
- 依法納稅與如實(shí)申報(bào)承諾書(7篇)
- 2025年企業(yè)內(nèi)部控制與風(fēng)險(xiǎn)預(yù)防指南
- 城市規(guī)劃建設(shè)管理責(zé)任承諾書(8篇)
- 客戶服務(wù)規(guī)范指南(標(biāo)準(zhǔn)版)
- 綠色環(huán)保行動(dòng)承諾書模板范文3篇
- 2025中電建水電開(kāi)發(fā)集團(tuán)有限公司電力營(yíng)銷專業(yè)財(cái)務(wù)資金管理專業(yè)管理崗位招聘4人筆試歷年參考題庫(kù)附帶答案詳解
- 英語(yǔ)四級(jí)考試(附官網(wǎng)登錄)筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2026年西安高新一中灃東中學(xué)招聘?jìng)淇碱}庫(kù)有答案詳解
- 湖北省隨州市隨縣2024-2025學(xué)年上學(xué)期期末測(cè)試題九年級(jí)物理試題
- 人教版七年級(jí)上冊(cè)地理期末復(fù)習(xí)知識(shí)點(diǎn)提綱
- 煙花爆竹零售店(點(diǎn))安全技術(shù)規(guī)范
- 六宮格數(shù)獨(dú)練習(xí)題(可直接打印-每頁(yè)6題)
- “雙減”背景下高中化學(xué)課堂作業(yè)設(shè)計(jì)與實(shí)施策略
- 空壓機(jī)維護(hù)保養(yǎng)協(xié)議書范本
- 安徽省合肥市蜀山區(qū)2024-2025學(xué)年七年級(jí)(上)期末數(shù)學(xué)試卷(無(wú)答案)
- 高等數(shù)學(xué)(第五版)課件 極限的概念
- 陳以平-糖尿病腎病的中西醫(yī)治療進(jìn)展
- 干法讀書分享會(huì)課堂
- 第六單元課外古詩(shī)詞誦讀《南安軍》說(shuō)課稿 2023-2024學(xué)年統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論