Linux系統下的多執行緒程式設計入門(轉)

BSDLite發表於2007-08-11
Linux系統下的多執行緒程式設計入門(轉)[@more@]引言

  執行緒(thread)技術早在60年代就被提出,但真正應用多執行緒到作業系統中去,是在80年代中期,solaris是這方面的佼佼者。傳統的Unix也支援執行緒的概念,但是在一個程式(process)中只允許有一個執行緒,這樣多執行緒就意味著多程式。現在,多執行緒技術已經被許多作業系統所支援,包括Windows/NT,當然,也包括Linux。

  為什麼有了程式的概念後,還要再引入執行緒呢?使用多執行緒到底有哪些好處?什麼的系統應該選用多執行緒?我們首先必須回答這些問題。

  使用多執行緒的理由之一是和程式相比,它是一種非常"節儉"的多工操作方式。我們知道,在Linux系統下,啟動一個新的程式必須分配給它獨立的地址空間,建立眾多的資料表來維護它的程式碼段、堆疊段和資料段,這是一種"昂貴"的多工工作方式。而執行於一個程式中的多個執行緒,它們彼此之間使用相同的地址空間,共享大部分資料,啟動一個執行緒所花費的空間遠遠小於啟動一個程式所花費的空間,而且,執行緒間彼此切換所需的時間也遠遠小於程式間切換所需要的時間。據統計,總的說來?桓黿?痰目??笤際且桓魷叱炭???0倍左右,當然,在具體的系統上,這個資料可能會有較大的區別。

  使用多執行緒的理由之二是執行緒間方便的通訊機制。對不同程式來說,它們具有獨立的資料空間,要進行資料的傳遞只能透過通訊的方式進行,這種方式不僅費時,而且很不方便。執行緒則不然,由於同一程式下的執行緒之間共享資料空間,所以一個執行緒的資料可以直接為其它執行緒所用,這不僅快捷,而且方便。當然,資料的共享也帶來其他一些問題,有的變數不能同時被兩個執行緒所修改,有的子程式中宣告為static的資料更有可能給多執行緒程式帶來災難性的打擊,這些正是編寫多執行緒程式時最需要注意的地方。

  除了以上所說的優點外,不和程式比較,多執行緒程式作為一種多工、併發的工作方式,當然有以下的優點:

  1) 提高應用程式響應。這對圖形介面的程式尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程式不會響應鍵盤、滑鼠、選單的操作,而使用多執行緒技術,將耗時長的操作(time consuming)置於一個新的執行緒,可以避免這種尷尬的情況。

  2) 使多CPU系統更加有效。作業系統會保證當執行緒數不大於CPU數目時,不同的執行緒執行於不同的CPU上。

  3) 改善程式結構。一個既長又複雜的程式可以考慮分為多個執行緒,成為幾個獨立或半獨立的執行部分,這樣的程式會利於理解和修改。

  下面我們先來嘗試編寫一個簡單的多執行緒程式。

  簡單的多執行緒程式設計

  Linux系統下的多執行緒遵循POSIX執行緒介面,稱為pthread。編寫Linux下的多執行緒程式,需要使用標頭檔案pthread.h,連線時需要使用庫libpthread.a。順便說一下,Linux下pthread的實現是透過系統呼叫clone()來實現的。clone()是Linux所特有的系統呼叫,它的使用方式類似fork,關於clone()的詳細情況,有興趣的讀者可以去檢視有關文件說明。下面我們展示一個最簡單的多執行緒程式example1.c。
QUOTE:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-946332/,如需轉載,請註明出處,否則將追究法律責任。

Linux系統下的多執行緒程式設計入門(轉)
請登入後發表評論 登入
全部評論

相關文章