多線程類庫的設(shè)計與實現(xiàn)doc

多線程類庫的設(shè)計與實現(xiàn)doc

ID:18548973

大?。?68.50 KB

頁數(shù):32頁

時間:2018-09-18

多線程類庫的設(shè)計與實現(xiàn)doc_第1頁
多線程類庫的設(shè)計與實現(xiàn)doc_第2頁
多線程類庫的設(shè)計與實現(xiàn)doc_第3頁
多線程類庫的設(shè)計與實現(xiàn)doc_第4頁
多線程類庫的設(shè)計與實現(xiàn)doc_第5頁
資源描述:

《多線程類庫的設(shè)計與實現(xiàn)doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、多線程類庫的設(shè)計與實現(xiàn)引言很多書都會告訴你那些概念是什么,然而只有很少的書會告訴你具體該怎么做。對于很多人來說,包括我,有時候掌握“該怎么做”要比了解“那是什么”要難得多。一方面,名詞解釋很少會出錯,而且做起來很輕松,而要具體執(zhí)行的話就立刻涉及到價值觀和方法論的問題,這些都比較難于統(tǒng)一,容易引起異議。另一方面,就我個人經(jīng)驗而言,很多人只會解釋“那是什么”,而根本不懂“該怎么做”。所以,我們打算逆流而上,基本上不去說“那是什么”,除非有相當(dāng)?shù)谋匾?。中心?nèi)容是著手“該怎么做”。這個實踐系列可以說是筆者積累的一些心得,當(dāng)然,不可避免的要涉及到個人的價值觀和方法論問

2、題,不可避免的會產(chǎn)生異議。不過那又怎樣呢,難道這個世界就不允許有異議嗎。實際上,我個人并不排斥異議,相反的,我倒認為沒有異議的氛圍要么是可怕的,要么是病態(tài)的。目標(biāo):用C++設(shè)計一個簡單、實用、便于移植的線程類先說第一條,簡單,這里指模型簡單,機制簡單。我們都知道線程是現(xiàn)代操作系統(tǒng)的基本概念之一,當(dāng)然定義有很多種了,我們這里隨便列一個:(Athreadis)Asequenceofinstructionswhichmayexecuteinparallelwithotherthreads.這個定義是從Wiki上拷過來的,中文直譯就是:(線程)是可以和其他線程并行執(zhí)

3、行的指令序列。這個定義是遞歸的,一般來說遞歸定義用來定義比較基本的概念,因為很難再往下分割了。為了明確起見,我們再為上面的定義加一些限制,讓它成為下面的樣子:1.線程是若干計算機指令序列的集合;2.線程可以和其他線程并行執(zhí)行;3.屬于同一個進程的若干個線程可以共享地址空間。第3條又帶出另一個概念“進程”,這里就不再解釋了。很多操作系統(tǒng)中有所謂線程的同步通信和異步通信機制。我們只使用同步通信機制。這么做有兩個好處,一是可以使我們的線程模型盡量簡單,二是可以回避操作系統(tǒng)相關(guān)性,因為同步機制比較簡單,大多數(shù)操作系統(tǒng)的實現(xiàn)相互都很類似,而異步通信機制差別就很大了。我

4、們再來說實用。這里的實用是指實用主義,亦即為了減少成本(編碼量)、提高效益(開發(fā)速度)而舍棄一些“本來應(yīng)該有”的特性。比如說,我們不打算設(shè)計多層次的類,也不打算設(shè)計抽象類,而只打算設(shè)計一個可以簡單使用的線程類。相反的,很多線程庫,包括ZThread,將線程模型抽象分化,封裝到多個層次的類里面。我們不是說這樣的方針不好,這里只是想強調(diào)我們的方針是實用主義。最后一條是關(guān)于移植性。我們希望這個線程類可以不加修改就應(yīng)用于Windows32位系統(tǒng)和支持PosixThread線程的Linux/Unix系統(tǒng)。其他。接下來我們來看看開發(fā)環(huán)境。我們要考慮同時支持Win32和L

5、inux系統(tǒng)。Windows上使用Microsoft?VisualC++2005Express,因這個軟件包具有免費的許可協(xié)議,不需要花錢。Linux上使用g++(gcc)3.4.4,更高的版本應(yīng)該也沒有問題,使用這個版本是為了和某些cygwin版本兼容。當(dāng)然,GNU流都是免費的。背景:C++與多線程這個系列的主要內(nèi)容是介紹怎樣用C++語言設(shè)計與實現(xiàn)一個多線程類庫。盡管多線程在現(xiàn)代主流操作系統(tǒng)中早已不是什么新鮮概念,多線程設(shè)計與開發(fā)也已經(jīng)成為軟件開發(fā)的流行模式,但是目前為止,C++語言規(guī)范本身并沒有明確支持多線程程序設(shè)計。根據(jù)目前最新的C++語言標(biāo)準(zhǔn)《ISO

6、/IEC14882:2003ProgrammingLanguageC++》,通篇只有一個地方出現(xiàn)"thread"這個字眼:Whenanexceptionisthrown,controlistransferredtothenearesthandlerwithamatchingtype(15.3);“nearest”meansthehandlerforwhichthecompound-statement,ctor-initializer,orfunction-bodyfollowingthetrykeywordwasmostrecentlyenteredbyth

7、ethreadofcontrolandnotyetexited.(筆者譯文:當(dāng)一個異常被拋出時,(程序)控制被轉(zhuǎn)交到最近的具有匹配類型的異??刂茐K。“最近”是指距離關(guān)鍵字try最近的并且與該控制同屬一個尚未退出的線程的,一個復(fù)合代碼斷,或者構(gòu)造函數(shù)的初始化符(即構(gòu)造函數(shù)的成員初始化列表),或者一個函數(shù)體。)這是標(biāo)準(zhǔn)中唯一一次提到線程這個概念,意思大致是說C++異常控制是線程單位分開的??梢奀++委員會并非是沒有意識到線程概念的存在,而只是有意回避它。因為C++是一個標(biāo)準(zhǔn)的編程語言,獨立于各種操作系統(tǒng)平臺。線程是與操作系統(tǒng)具體實現(xiàn)密切相關(guān)的事物,C++語言中本

8、身去支持線程是不合適的。只是在異常處理的定義中實在繞

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。