linux 多線程編程入門

linux 多線程編程入門

ID:26455081

大小:71.50 KB

頁數(shù):12頁

時(shí)間:2018-11-27

linux 多線程編程入門_第1頁
linux 多線程編程入門_第2頁
linux 多線程編程入門_第3頁
linux 多線程編程入門_第4頁
linux 多線程編程入門_第5頁
資源描述:

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

1、Linux系統(tǒng)下的多線程編程入門轉(zhuǎn)自http://hi.baidu.com/sky005/blog/item/e285901a02d99c1f8718bf4c.html0引言  線程(thread)技術(shù)早在60年代就被提出,但真正應(yīng)用多線程到操作系統(tǒng)中去,是在80年代中期,solaris是這方面的佼佼者。傳統(tǒng)的Unix也支持線程的概念,但是在一個(gè)進(jìn)程(process)中只允許有一個(gè)線程,這樣多線程就意味著多進(jìn)程?,F(xiàn)在,多線程技術(shù)已經(jīng)被許多操作系統(tǒng)所支持,包括Windows/NT,當(dāng)然,也包括Linux?! 槭裁从辛诉M(jìn)程的概念后,還要再引入線程

2、呢?使用多線程到底有哪些好處?什么的系統(tǒng)應(yīng)該選用多線程?我們首先必須回答這些問題?! ∈褂枚嗑€程的理由之一是和進(jìn)程相比,它是一種非常"節(jié)儉"的多任務(wù)操作方式。我們知道,在Linux系統(tǒng)下,啟動(dòng)一個(gè)新的進(jìn)程必須分配給它獨(dú)立的地址空間,建立眾多的數(shù)據(jù)表來維護(hù)它的代碼段、堆棧段和數(shù)據(jù)段,這是一種"昂貴"的多任務(wù)工作方式。而運(yùn)行于一個(gè)進(jìn)程中的多個(gè)線程,它們彼此之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動(dòng)一個(gè)線程所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于啟動(dòng)一個(gè)進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時(shí)間?! ∈褂枚嗑€程的理由之二是線程間方

3、便的通信機(jī)制。對(duì)不同進(jìn)程來說,它們具有獨(dú)立的數(shù)據(jù)空間,要進(jìn)行數(shù)據(jù)的傳遞只能通過通信的方式進(jìn)行,這種方式不僅費(fèi)時(shí),而且很不方便。線程則不然,由于同一進(jìn)程下的線程之間共享數(shù)據(jù)空間,所以一個(gè)線程的數(shù)據(jù)可以直接為其它線程所用,這不僅快捷,而且方便。當(dāng)然,數(shù)據(jù)的共享也帶來其他一些問題,有的變量不能同時(shí)被兩個(gè)線程所修改,有的子程序中聲明為static的數(shù)據(jù)更有可能給多線程程序帶來災(zāi)難性的打擊,這些正是編寫多線程程序時(shí)最需要注意的地方?! 〕艘陨纤f的優(yōu)點(diǎn)外,不和進(jìn)程比較,多線程程序作為一種多任務(wù)、并發(fā)的工作方式,當(dāng)然有以下的優(yōu)點(diǎn):  1)提高應(yīng)用程序響應(yīng)

4、。這對(duì)圖形界面的程序尤其有意義,當(dāng)一個(gè)操作耗時(shí)很長(zhǎng)時(shí),整個(gè)系統(tǒng)都會(huì)等待這個(gè)操作,此時(shí)程序不會(huì)響應(yīng)鍵盤、鼠標(biāo)、菜單的操作,而使用多線程技術(shù),將耗時(shí)長(zhǎng)的操作(timeconsuming)置于一個(gè)新的線程,可以避免這種尷尬的情況?! ?)使多CPU系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),不同的線程運(yùn)行于不同的CPU上。3)改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改?! ∠旅嫖覀兿葋韲L試編寫一個(gè)簡(jiǎn)單的多線程程序。1簡(jiǎn)單的多線程編程  Linux系統(tǒng)下的多線程遵循PO

5、SIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時(shí)需要使用庫libpthread.a。順便說一下,Linux下pthread的實(shí)現(xiàn)是通過系統(tǒng)調(diào)用clone()來實(shí)現(xiàn)的。clone()是Linux所特有的系統(tǒng)調(diào)用,它的使用方式類似fork,關(guān)于clone()的詳細(xì)情況,有興趣的讀者可以去查看有關(guān)文檔說明。下面我們展示一個(gè)最簡(jiǎn)單的多線程程序example1.c。/*example.c*/#include<stdio.h>#include<pthread.h>voidthread(void){ 

6、inti; for(i=0;i<3;i++)  printf("Thisisapthread.n");}intmain(void){ pthread_tid; inti,ret; ret=pthread_create(&id,NULL,(void*)thread,NULL); if(ret!=0){  printf("Createpthreaderror!n");  exit(1); } for(i=0;i<3;i++)  printf("Thisisthemainprocess.n"); pthread_join(id,NULL); retu

7、rn(0);}  我們編譯此程序:gccexample1.c-lpthread-oexample1運(yùn)行example1,我們得到如下結(jié)果:Thisisthemainprocess.Thisisapthread.Thisisthemainprocess.Thisisthemainprocess.Thisisapthread.Thisisapthread.  再次運(yùn)行,我們可能得到如下結(jié)果:Thisisapthread.Thisisthemainprocess.Thisisapthread.Thisisthemainprocess.Thisisap

8、thread.Thisisthemainprocess.  前后兩次結(jié)果不一樣,這是兩個(gè)線程爭(zhēng)奪CPU資源的結(jié)果。上面的示例中,我們使用到了兩個(gè)函數(shù),

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

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

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(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)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。