Linux 多執行緒

2021-09-03 01:16:04 字數 1022 閱讀 9654

⼀程序的多個執行緒共享

共享:1.檔案描述符表,乙個執行緒開啟檔案,另乙個執行緒拿著檔案描述符就可使用

2.訊號的處理方式

3.當前工作目錄

4.使用者id組id

獨有:識別符號    棧    上下文資料    errno    訊號遮蔽字    排程優先順序

程序和執行緒的關係如下圖:

linux下沒有真正的執行緒,因為linux的執行緒是以程序的pcb模擬的,也叫輕量級程序,因為這時候多個pcb共享同乙個虛擬位址空間,所以這時候pcb相較於傳統的pcb占用的資源更少,更加輕量化。

以前所說的程序是只有乙個執行緒的程序,程序就變成了至少具有乙個執行緒的執行緒組。執行緒組id:tgid = pid(第乙個執行緒)。乙個程式執行起來,一開始會建立乙個pcb,這個pcb中有乙個pid,有乙個tgid,並且這個tgid=pid,再往後,如果建立了新的執行緒(pcb),這些pcb中的tgid都是一樣的。外部看到的pid實際上是tgid,而tgid是執行緒組id,cpu排程程序是以pcb來排程的,然而linux的pcb是執行緒,因此執行緒是cpu排程的基本單位。

⼀個很少被外部事件阻塞的計算密集型執行緒往往⽆法與共它執行緒共享同⼀個處理器。如果計算密集型執行緒的數量⽐可⽤的處理器多,那麼可能會有較⼤的效能損失,這⾥的效能損失指的是增加了額外的同步和排程開銷,⽽可⽤的資源不變。

編寫多執行緒需要更全⾯更深⼊的考慮,在⼀個多執行緒程式⾥,因時間分配上的細微偏差或者因共享了不該共享的變數⽽造成不良影響的可能性是很⼤的,換句話說執行緒之間是缺乏保護的。

程序是訪問控制的基本粒度,在⼀個執行緒中調⽤某些os函式會對整個程序造成影響。

編寫與除錯⼀個多執行緒程式⽐單執行緒程式困難得多

linux多執行緒

linux下為了多執行緒同步,通常用到鎖的概念。posix下抽象了乙個鎖型別的結構 ptread mutex t。通過對該結構的操作,來判斷資源是否可以訪問。顧名思義,加鎖 lock 後,別人就無法開啟,只有當鎖沒有關閉 unlock 的時候才能訪問資源。它主要用如下5個函式進行操作。1 pthre...

linux多執行緒

執行緒標識 就像每個程序都有乙個id一樣,執行緒也有自己的id。程序id用pid t來表示,他是乙個unsigned int。程序id用pthread t來表示,pthread t不能把它當整數處理。程序可以通過pthread self 函式獲得自身的執行緒id。執行緒建立 在程序中只有乙個控制線程...

Linux多執行緒

一 執行緒的特點 1.執行緒是程序的乙個執行流,是cpu排程和分配的基本單位。執行緒是程式執行的最小單位。2.執行緒不會影響到其它執行緒的執行。比如乙個執行緒崩潰,其它執行緒正常執行。3.同一程序內的執行緒共享程序的位址空間。二 乙個執行緒的組成 1.乙個指向當前被執行指令的指令指標 2.乙個棧空間...