首頁 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡課程 模擬考試 考友錄 實用文檔 繽紛校園 英語學習
2010考研 | 自學考試 | 成人高考 | 專 升 本 | 法律碩士 | MBA/MPA | 中 科 院
四六級 | 商務英語 | 公共英語 | 職稱日語 | 職稱英語 | 博思 | 口譯筆譯 | GRE GMAT | 日語 | 托福
雅思 | 專四專八 | 新概念 | 自考英語 | 零起點英、、、韓語 | 在職申碩英語
在職攻碩英語 | 成人英語三級
等級考試 | 水平考試 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證
公務員 | 報關員 | 報檢員 | 外銷員 | 司法考試 | 導游考試 | 教師資格 | 國際商務師 | 跟單員
單證員 | 物流師 | 價格鑒證師 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 人力資源管理師 | 管理咨詢師
期貨從業(yè)資格 | 社會工作者
會計職稱 | 注會CPA | 經(jīng)濟師 | 統(tǒng)計師 | 注冊稅務師 | 評估師 | 精算師 | 高會 | ACCA | 審計師
法律顧問 | 會計證
一級建造師 | 二級建造師 | 造價師 | 監(jiān)理師 | 安全師 | 咨詢師 | 結(jié)構師 | 建筑師 | 安全評價師
房地產(chǎn)估價師 | 土地估價師 | 設備監(jiān)理師 | 巖土工程師 | 質(zhì)量資格 | 房地產(chǎn)經(jīng)紀人 | 造價員
投資項目管理 | 土地代理人 | 環(huán)保師 | 環(huán)境影響評價 | 物業(yè)管理師 | 城市規(guī)劃師 | 公路監(jiān)理師
公路造價工程師 | 招標師
執(zhí)業(yè)護士 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 衛(wèi)生資格
您現(xiàn)在的位置: 考試吧(Exam8.com) > 軟件水平考試 > 系統(tǒng)分析師 > 正文

多線程支持和線程安全(1)

多線程編程方法是一種高級的編程技術,同時它也是復雜應用程序系統(tǒng)中,一種重要的和必不可少的程序設計技術,它能有效地解決各種并行的復雜工作任務,使一些特別復雜的應用系統(tǒng)的總體設計和解決方案,變得更簡潔和更清晰起來。多線程編程方法的運用,一般需要位于計算機底層的操作系統(tǒng)的有效支持,同時也需要操作系統(tǒng)能夠提供,一些用于多線程支持的系統(tǒng)功能服務接口(如信號量通信原語的操作接口)。但是僅有這些仍然是不夠的,例如,這些服務接口太過于底層而不容易被學習使用,也不安全。因此在基礎庫系統(tǒng)中,同樣也需要對多線程編程方法提供更多和更有效的支持。這主要包含兩個方面的內(nèi)容,首先就是提供對多線程支持得更好和更完善的功能封裝,也即線程庫;另外一項當然也很重要,那就是基礎庫系統(tǒng)中各組件模塊的線程安全設計。
 線程庫

  線程庫是基礎庫系統(tǒng)中一個重要的組成模塊。設計線程庫時,應該首先考慮它的模型的建立,以及它應該所涵蓋的功能。主要包括有用于線程間互斥和同步控制的功能實現(xiàn)與封裝,線程的創(chuàng)建、運行和銷毀,以及訪問并控制線程的一些運行狀態(tài)或錯誤狀態(tài)等。另外線程庫也涉及到,線程之間的數(shù)據(jù)共享或數(shù)據(jù)通信等功能的實現(xiàn)。下面我們主要介紹兩種有代表性的線程庫的實現(xiàn),也即MFC中的線程庫和JDK平臺中的線程模型。

  MFC中為了實現(xiàn)線程間互斥和同步控制功能,主要提供有四種類型的對象,如圖10-57所示,包括CCriticalSection、CEvent、CMutex以及CSemaphore等。

  首先介紹CMutex類型,它是對NT操作系統(tǒng)內(nèi)核中提供的互斥對象(mutex)的封裝。它能夠確保線程擁有對單個資源的互斥訪問權,也即多線程對共享資源的互斥訪問。互斥對象包含一個使用數(shù)量,一個線程ID和一個遞歸計數(shù)器。并且線程在等待訪問資源時可以設定一個超時值。

  CCriticalSection類型是對臨界區(qū)(critical section)的封裝。它的作用與特性和CMutex類似,都是用于線程間對共享資源的互斥訪問,但是它與CMutex之間稍有不同的是,它不屬于內(nèi)核對象,而是屬于用戶方式的對象。所以它的效率要比CMutex高很多,并且因為如此,它也只能被用于線程之間的互斥控制,而不能用于進程之間的互斥。

  CEvent是對事件(event)內(nèi)核對象的封裝,它是一個最基本,也最靈活的,被用于線程間實現(xiàn)同步的控制對象。CEvent能夠通知一個操作已經(jīng)完成。它有兩種不同類型的事件對象。一種是人工重置的事件,另一種是自動重置的事件。當人工重置的事件得到通知時,等待該事件的所有線程均變?yōu)榭烧{(diào)度線程。當一個自動重置的事件得到通知時,等待該事件的線程中只有一個線程變?yōu)榭烧{(diào)度線程。

  最后一個就是CSemaphore類型,它是對信號量(Semaphore)內(nèi)核對象的封裝。適用于線程之間的同步控制,它是功能最強、使用最靈活,也最復雜的同步控制對象。

  除了上面講述到的幾種用于實現(xiàn)線程間互斥和同步的控制對象外,MFC的線程庫中還有一個非常重要的類模塊,也即CWinThread,它是表示應用程序中的執(zhí)行線程,管理線程的創(chuàng)建、運行和銷毀,以及其它許多方面的功能(如線程優(yōu)先級、狀態(tài)等)。

轉(zhuǎn)帖于:軟件水平考試_考試吧
文章搜索
多線程支持和線程安全(1)網(wǎng)友評論網(wǎng)友評論
版權聲明 --------------------------------------------------------------------------------------
    如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權益,請與我們聯(lián)系,我們將會及時處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請注明出處。
 gaoxiaoliang