Linux系統(tǒng)下的多線程編程入門.doc

Linux系統(tǒng)下的多線程編程入門.doc

ID:49937230

大小:61.00 KB

頁數:12頁

時間:2020-03-03

Linux系統(tǒng)下的多線程編程入門.doc_第1頁
Linux系統(tǒng)下的多線程編程入門.doc_第2頁
Linux系統(tǒng)下的多線程編程入門.doc_第3頁
Linux系統(tǒng)下的多線程編程入門.doc_第4頁
Linux系統(tǒng)下的多線程編程入門.doc_第5頁
資源描述:

《Linux系統(tǒng)下的多線程編程入門.doc》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫

1、Linux系統(tǒng)下的多線程編程入門2006-01-1709:13作者:pcstudy出處:blogchina責任編輯:方舟???相關專題:Linux設備驅動程序開發(fā)入門  引言  線程(thread)技術早在60年代就被提出,但真正應用多線程到操作系統(tǒng)中去,是在80年代中期,solaris是這方面的佼佼者。傳統(tǒng)的Unix也支持線程的概念,但是在一個進程(process)中只允許有一個線程,這樣多線程就意味著多進程?,F在,多線程技術已經被許多操作系統(tǒng)所支持,包括Windows/NT,當然,也包括Linux?! 槭裁从辛诉M程的概念后,還

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

3、的說來桓黿痰目笤際且桓魷叱炭?0倍左右,當然,在具體的系統(tǒng)上,這個數據可能會有較大的區(qū)別?! ∈褂枚嗑€程的理由之二是線程間方便的通信機制。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其它線程所用,這不僅快捷,而且方便。當然,數據的共享也帶來其他一些問題,有的變量不能同時被兩個線程所修改,有的子程序中聲明為static的數據更有可能給多線程程序帶來災難性的打擊,這些正是編寫多線程

4、程序時最需要注意的地方?! 〕艘陨纤f的優(yōu)點外,不和進程比較,多線程程序作為一種多任務、并發(fā)的工作方式,當然有以下的優(yōu)點:  1)提高應用程序響應。這對圖形界面的程序尤其有意義,當一個操作耗時很長時,整個系統(tǒng)都會等待這個操作,此時程序不會響應鍵盤、鼠標、菜單的操作,而使用多線程技術,將耗時長的操作(timeconsuming)置于一個新的線程,可以避免這種尷尬的情況?! ?)使多CPU系統(tǒng)更加有效。操作系統(tǒng)會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。  3)改善程序結構。一個既長又復雜的進程可以考慮分為多個線

5、程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改?! ∠旅嫖覀兿葋韲L試編寫一個簡單的多線程程序?! 『唵蔚亩嗑€程編程  Linux系統(tǒng)下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時需要使用庫libpthread.a。順便說一下,Linux下pthread的實現是通過系統(tǒng)調用clone()來實現的。clone()是Linux所特有的系統(tǒng)調用,它的使用方式類似fork,關于clone()的詳細情況,有興趣的讀者可以去查看有關文檔說明。下面我們展示

6、一個最簡單的多線程程序example1.c。/*example.c*/#include#includevoidthread(void){ 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

7、");  exit(1); } for(i=0;i<3;i++)  printf("Thisisthemainprocess.n"); pthread_join(id,NULL); return(0);}  我們編譯此程序:gccexample1.c-lpthread-oexample1  運行example1,我們得到如下結果:Thisisthemainprocess.Thisisapthread.Thisisthemainprocess.Thisisthemainprocess.Thisisapthread.Thisisapth

8、read.  再次運行,我們可能得到如下結果:Thisisapthread.Thisisthemainprocess.Thisisapthread.Thisisthemainprocess.Thisisapthread.Thisist

當前文檔最多預覽五頁,下載文檔查看全文

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

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