一旦核心物件建立完成,系統就分配用於執行緒的堆疊的記憶體。該記憶體是從程序的位址空間分配而來的。然後系統將兩個值寫入新執行緒的堆疊的上端(執行緒堆疊總是從記憶體的高位址向低位址建立)。
寫入堆疊的第乙個值是傳遞給createthread的pvparam引數的值。緊靠它的下面是傳遞給createthread的pfnstartaddr引數的值。
指令指標和堆疊指標暫存器是執行緒上下文中兩個最重要的暫存器。記住,執行緒總是在程序的上下文中執行的。因此,這些位址都用於標識擁有執行緒的程序位址空間中的記憶體。當執行緒的核心物件被初始化時,context結構的堆疊指標暫存器被設定為執行緒堆疊上用來放置pfnstartaddr的位址。指令指標暫存器置為稱為basethreadstart的未文件化(和未輸出)的函式的位址中。該函式包含在kernel32.dll模組中(這也是實現createthread函式的地方)。
由於新執行緒的指令指標被置為basethreadstart,因此該函式實際上是執行緒開始執行的地方。
當新執行緒執行basethreadstart函式時,將會出現下列情況:
* 系統呼叫執行緒函式,並將你傳遞給createthread函式的pvparam引數傳遞給它。
* 當執行緒函式返回時,basethreadstart呼叫exitthread,並將執行緒函式的返回值傳遞給它。該執行緒核心物件的使用計數被遞減,執行緒停止執行。
* 如果執行緒產生乙個沒有處理的異常條件,由basethreadstart函式建立的seh幀將負責處理該異常條件。通常情況下,這意味著向使用者顯示乙個訊息框,並且在使用者撤消該訊息框時,
basethreadstart呼叫exitprocess,以終止整個程序的執行,而不只是終止執行緒的執行。
注意,在basethreadstart函式中,執行緒要麼呼叫exitthread,要麼呼叫exitprocess。這意味著執行緒不能退出該函式,它總是在函式中被撤消。這就是basethreadstart的原型規定返回void,而它從來不返回的原因。
組合數的一些性質
眾所周知,當n,m在自然數集中有 cm n n m n m 由此可證得cm n cm n 1 cm 1 n 1 而cm n 1 mc n m 1m是否也能用兩個組合數來表示cm n答案是肯定的。容易猜想cm n c m n 1 cm 1 n 1而且猜想很容易證得是正確的。證明如下 cm n 1 m ...
介紹一些預言性質的夢
介紹一些預言性質的夢 柳鯤鵬2007 6 11 關鍵字 夢 預言 簡介 儘管很荒謬,但是真的有預言夢。本人就總結一些典型特徵的預言夢,希望有興趣的人可以自己體會。人總是要做夢的。有人認為夢沒有什麼意義,其實不然。凡是多次出現的東西,不論現象如何荒誕,必有內在的規律。在我們不了解原因的時候,卻可以總結...
關於調和函式的一些性質
以下均為10年前討論的一些內容,或者更早一些。問題1.考慮調和函式 delta u 0 mbox r n n geq2 且 u x geq 1 x in r n 其中 alpha in 0,1 證明 u 必為常數。證明 1 考慮直接對 u inf limits u 在 b r 上使用harnack ...