淺談 linux 多線程編程和 windows 多線程編程的異同

淺談 linux 多線程編程和 windows 多線程編程的異同

ID:42654445

大小:97.93 KB

頁(yè)數(shù):10頁(yè)

時(shí)間:2019-09-19

淺談 linux 多線程編程和 windows 多線程編程的異同_第1頁(yè)
淺談 linux 多線程編程和 windows 多線程編程的異同_第2頁(yè)
淺談 linux 多線程編程和 windows 多線程編程的異同_第3頁(yè)
淺談 linux 多線程編程和 windows 多線程編程的異同_第4頁(yè)
淺談 linux 多線程編程和 windows 多線程編程的異同_第5頁(yè)
資源描述:

《淺談 linux 多線程編程和 windows 多線程編程的異同》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

1、淺談linux多線程編程和windows多線程編程的異同很早以前就想寫寫linux下多線程編程和windows下的多線程編程了,但是每當(dāng)寫時(shí)又不知道從哪個(gè)地方寫起,怎樣把自己知道的東西都寫出來(lái),下面我就談?wù)刲inux多線程及線程同步,并將它和windows的多線程進(jìn)行比較,看看他們之間有什么相同點(diǎn)和不同的地方。其實(shí)最開(kāi)始我是搞windows下編程的,包括windows編程,windows驅(qū)動(dòng),包括usb驅(qū)動(dòng),ndis驅(qū)動(dòng),pci驅(qū)動(dòng),1394驅(qū)動(dòng)等等,同時(shí)也一條龍服務(wù),做windows下的應(yīng)用程序開(kāi)發(fā),后面慢慢的我又對(duì)linux開(kāi)發(fā)產(chǎn)生比較深的興趣和愛(ài)好

2、,就轉(zhuǎn)到搞linux開(kāi)發(fā)了。在接下來(lái)的我還會(huì)寫一些博客,主要是寫linux編程和windows編程的區(qū)別吧,現(xiàn)在想寫的是linux下usb驅(qū)動(dòng)和windows下usb驅(qū)動(dòng)開(kāi)發(fā)的區(qū)別,這些都是后話,等我將linux多線程和windows多線程講解完后,我再寫一篇usb驅(qū)動(dòng),談?wù)剋indows和linuxusb驅(qū)動(dòng)的東東。好了,言歸正傳。開(kāi)始將多線程了。首先我們講講為什么要采用多線程編程,其實(shí)并不是所有的程序都必須采用多線程,有些時(shí)候采用多線程,性能還沒(méi)有單線程好。所以我們要搞清楚,什么時(shí)候采用多線程。采用多線程的好處如下:(1)因?yàn)槎嗑€程彼此之間采用相同的

3、地址空間,共享大部分的數(shù)據(jù),這樣和多進(jìn)程相比,代價(jià)比較節(jié)儉,因?yàn)槎噙M(jìn)程的話,啟動(dòng)新的進(jìn)程必須分配給它獨(dú)立的地址空間,這樣需要數(shù)據(jù)表來(lái)維護(hù)代碼段,數(shù)據(jù)段和堆棧段等等。(2)多線程和多進(jìn)程相比,一個(gè)明顯的優(yōu)點(diǎn)就是線程之間的通信了,對(duì)不同進(jìn)程來(lái)說(shuō),它們具有獨(dú)立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過(guò)通信的方式進(jìn)行,這種方式不僅費(fèi)時(shí),而且很不方便。但是對(duì)于多線程就不一樣了。他們之間可以直接共享數(shù)據(jù),比如最簡(jiǎn)單的方式就是共享全局變量。但是共享全部變量也要注意哦,呵呵,必須注意同步,不然后果你知道的。呵呵。(3)在多cpu的情況下,不同的線程可以運(yùn)行不同的cpu下,這樣

4、就完全并行了。反正我覺(jué)得在這種情況下,采用多線程比較理想。比如說(shuō)你要做一個(gè)任務(wù)分2個(gè)步驟,你為提高工作效率,你可以多線程技術(shù),開(kāi)辟2個(gè)線程,第一個(gè)線程就做第一步的工作,第2個(gè)線程就做第2步的工作。但是你這個(gè)時(shí)候要注意同步了。因?yàn)橹挥械谝徊阶鐾瓴拍茏龅?步的工作。這時(shí),我們可以采用同步技術(shù)進(jìn)行線程之間的通信。針對(duì)這種情況,我們首先講講多線程之間的通信,在windows平臺(tái)下,多線程之間通信采用的方法主要有:(1)共享全局變量,這種方法是最容易想到的,呵呵,那就首先講講吧,比如說(shuō)吧,上面的問(wèn)題,第一步要向第2步傳遞收據(jù),我們可以之間共享全局變量,讓兩個(gè)線程之

5、間傳遞數(shù)據(jù),這時(shí)主要考慮的就是同步了,因?yàn)槟愫竺娴木€程在對(duì)數(shù)據(jù)進(jìn)行操作的時(shí)候,你第一個(gè)線程又改變了數(shù)據(jù)的內(nèi)容,你不同步保護(hù),后果很嚴(yán)重的。你也知道,這種情況就是讀臟數(shù)據(jù)了。在這種情況下,我們最容易想到的同步方法就是設(shè)置一個(gè)boolflag了,比如說(shuō)在第2個(gè)線程還沒(méi)有用完數(shù)據(jù)前,第一個(gè)線程不能寫入。有時(shí)在2個(gè)線程所需的時(shí)間不相同的時(shí)候,怎樣達(dá)到最大效率的同步,就比較麻煩了。咱們可以多開(kāi)幾個(gè)緩沖區(qū)進(jìn)行操作。就像生產(chǎn)者消費(fèi)者一樣了。如果是2個(gè)線程一直在跑的,由于時(shí)間不一致,緩沖區(qū)遲早會(huì)溢出的。在這種情況下就要考慮了,是不讓數(shù)據(jù)寫入還是讓數(shù)據(jù)覆蓋掉老的數(shù)據(jù),這時(shí)

6、候就要具體問(wèn)題具體分析了。就此打住,呵呵。就是用bool變量控制同步,linux和windows是一樣的。既然講道了這里,就再講講其它同步的方法。同樣針對(duì)上面的這個(gè)問(wèn)題,共享全局變量同步問(wèn)題。除了采用bool變量外,最容易想到的方法就是互斥量了。呵呵,也就是傳說(shuō)中的加鎖了。windows下加鎖和linux下加鎖是類似的。采用互斥量進(jìn)行同步,要想進(jìn)入那段代碼,就先必須獲得互斥量。linux上互斥量的函數(shù)是:windows下互斥量的函數(shù)有:createmutex創(chuàng)建一個(gè)互斥量,然后就是獲得互斥量waitforsingleobject函數(shù),用完了就釋放互斥量R

7、eleaseMutex(hMutex),當(dāng)減到0的時(shí)候內(nèi)核會(huì)才會(huì)釋放其對(duì)象。下面是windows下與互斥的幾個(gè)函數(shù)原型。HANDLEWINAPICreateMutex(__inLPSECURITY_ATTRIBUTESlpMutexAttributes,__inBOOLbInitialOwner,__inLPCTSTRlpName);可以可用來(lái)創(chuàng)建一個(gè)有名或無(wú)名的互斥量對(duì)象第一參數(shù)可以指向一個(gè)結(jié)構(gòu)體SECURITY_ATTRIBUTES 一般可以設(shè)為null;第二參數(shù)指當(dāng)時(shí)的函數(shù)是不是感應(yīng)感應(yīng)狀態(tài)FALSE為當(dāng)前擁有者不會(huì)創(chuàng)建互斥第三參數(shù)指明是否是有名的

8、互斥對(duì)象如果是無(wú)名用null就好。DWORDWINAPIWaitForSingl

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

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

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