Windows執行機理 執行緒的機制 1

2022-04-06 00:07:40 字數 2125 閱讀 6901

1. 執行緒的工作方式執行緒是

windows 95

的新特徵,乙個執行緒就是乙個執行程式的事例。執行緒允許乙個程式同時在多於乙個以上的地方執行,這有些像多個

cpu,每乙個

cpu執行程式的一部分。在單處理器系統中(

window 95

只支援單處理器系統),只有同時處理時才出現執行緒。

windows 95

系統中,執行緒之間切換

cpu的間隔稱為時間片(

timeslicing

)。因為硬體內部的計時器是以有規律的時間間隔通知作業系統的,所以作業系統可以選擇不同的執行緒。另外,儘管

16位的程式作為乙個執行緒出現在系統執行緒表中,但只有

windows 32

應用程式中能產生附加的執行緒。

乙個執行緒被切換有兩個原因,原因之一是本執行緒需要另乙個執行緒先執行,此時,當前執行緒則把

cpu讓給另乙個執行緒。另乙個原因是當乙個執行緒執行了足夠長的時間後,需要把執行緒給另乙個程式。

windows 95

執行緒排程使用的是這樣的一種演算法,即把大部分時間給那些急需的執行緒。

cpu時間間隔用硬體時鐘中斷,作業系統內部計時器中斷處理排程決定另乙個程式是否需要執行,如果執行,則切換到另乙個執行緒上。

windows 95

的時間片是

20毫秒,也就是說,一秒鐘內,理論上可在

50個執行緒之間進行強制切換,但如果所有的執行緒都主動放棄

cpu或等待系統,則切換的頻率就會很高,每秒切換4、

5千次也不奇怪。

每乙個執行緒被分配到乙個程序中,當作業系統產生乙個新的程序時,也要設定乙個初始執行緒。乙個程序中的所有執行緒共享該程序的資源(下面要用「資源」一詞來表示作業系統提供的內容),程序資源包括記憶體文字、文字柄和當前目錄。

一般來講,程序不交換,也不使用其他程序的資源。然而,乙個程序中的多執行緒可能在程序資源的使用上發生衝突,這樣,資源共享可能是乙個混合物。例如,程式有一段**改變了幾個全域性變數的**序列,如果乙個執行緒正好在這個序列中間被切換掉,那麼下乙個執行緒將作用這些全域性變數,而且與狀態不一致。成功地執行多執行緒程式要求你標記出乙個程序中的所有的資源,這些資源需要由同步機進行監視,保證它們不會被不適宜的執行緒侵害。臨界段(

criticalsection

)和其他的執行緒同步機在下面進行討論。

儘管執行緒共享程序資源,但每乙個執行緒還有一定的資源提供自身,那麼最重要的是棧嗎?

不,每乙個執行緒本身沒有

ss暫存器和相互依存,實際上,每乙個執行緒在本身所在程序的位址空間內部有乙個位址空間區。每一線程被分配的棧區隱含值是

1mb,這個容量要麼在可執行檔案的

.def

檔案棧中,要麼在呼叫

createthread

產生執行緒規定乙個非零棧區。

windows 95

對每乙個執行緒棧不使用

mb,而是用「

guardpage

(保護頁)」。

2. 執行緒與gdi的衝突:宕機的主要原因

例如,如下是乙個檔案複製的程式,這個程式由兩個執行緒組成,乙個是複製檔案的執行緒,另乙個是顯示檔案複製進度的過程。當檔案複製一部分後,進度條就向前移動一點。理論上,這個程式沒什麼問題。但是,這個程式有乙個很大的隱患,即主程式也可能某一時刻要更新這個進度條。例如,進度被其他視窗擋住後或者整個視窗放大縮小時,整個視窗就要重新整理,這時,執行緒的那個部分也要重新整理它,作業系統也要重新整理它。這樣,三個部分都要去重新整理它,程式就很容易死鎖。程式執行介面如圖

所示。程式執行介面圖

這時會什麼響應也沒有了。這種問題在多執行緒中是很常見的。那怎麼處理這個問題呢?

有一條原則,即程式中的執行緒一概不直接操作執行緒部分中的

gdi。它只要發乙個訊息給主程式,讓主程式來繪製圖形,就不會出現任何的問題了

。傳送訊息的方法就是用

postmessage

的函式。但一定不能用

sendmessage

。因為用

postmessage

可以讓主程式去排程繪圖,而

sendmesage

dc,記憶體中的

dc表示的是一塊視訊記憶體。

dc代表的是乙個視窗,因為乙個程式得到此

dc時,其他程式是不能再取得

dc的。以後,如果繼續再取,就會進入死鎖的迴圈內。死鎖結構如圖

所示。

Windows執行機理 建立視窗

windows執行機理這系列文章都是來至於 零基礎學qt4程式設計 吳迪,個人覺得寫得很好,所以進行了搬運和個人加工 windows 視窗在建立之前,其屬性必須設定好,所謂屬性包括類的名字 圖示 游標及視窗過程處理函式等屬性。為了設定這些屬性,windows 要求註冊視窗類,一經註冊,就可以建立更多...

Windows執行機理 API與SDK

windows執行機理這系列文章都是來至於 零基礎學qt4程式設計 吳迪,個人覺得寫得很好,所以搬運加以整理。其次我們經常聽到的win32 sdk開發,qt sdk開發等等說法,那什麼是sdk,sdk全稱 software development kit 中文翻譯就是軟體開發開發包,例如,當我們買某...

Windows執行機理 主程式 WinMain

windows執行機理這系列文章都是來至於 零基礎學qt4程式設計 吳迪,個人覺得寫得很好,所以進行了搬運和個人加工 在windows 作業系統下,用c 或者c 來編寫ms dos 應用程式時,最起碼要有乙個main 函式。當使用者執行該應用程式時,作業系統會自動呼叫main。但當編寫windows...