建立執行緒後為什麼關閉了執行緒控制代碼,執行緒還是可以執行

2021-06-13 20:47:08 字數 1874 閱讀 3960

主線程只要擁有執行緒控制代碼,事後就可以對執行緒執行某些操作,比如查詢執行緒狀態等等,靠的就是控制代碼,如果沒有控制代碼,系統就無從知道要查的是那個執行緒的狀態。但保持這個控制代碼不關閉,並不是執行緒執行的條件。

關閉執行緒控制代碼只是釋放控制代碼資源,新開啟執行緒後,如果不再利用其控制代碼,應該關閉控制代碼,釋放系統資源。關閉執行緒控制代碼和執行緒的結束與否沒有關係。

控制代碼可以認為是系統對資源(如執行緒)的分配的乙個編號。關閉這個編號,對於不同的資源,效果不盡相同。對於執行緒來說,關閉這個編號並不意味著終止執行緒,只是之後很難再操縱這個執行緒。   這就好比摘掉了門牌號,並不傷害這一家人,只是以後往這送信就麻煩些了。   還有,如果主線程只想建立執行緒,而並不想之後再查詢或操縱它,那麼及時關閉控制代碼是個好習慣,免得當時沒關,以後又忘了,於是洩漏了系統的控制代碼資源(系統控制代碼總數是有限的)。

如果知道引用計數是怎麼回事就很好解釋了。   closehandle(hthread)   只是減去乙個hthread的引用計數。

執行緒控制代碼就像你家的位址,執行緒就像你的家房子,   你說如果沒有了你家的位址,難道就沒有你家的房子了嗎?   執行緒與執行緒控制代碼也是一樣的道理,控制代碼只是可以對這個執行緒作一些操作。

包括執行緒控制代碼在內的所有控制代碼都是指向乙個核心物件,而核心物件是作業系統維護的乙個資料結構,包含與物件相關的資訊,每個執行緒也有與自己對應的核心物件。通過指向核心物件的控制代碼,使用者程序就可以呼叫系統api對核心物件包括執行緒進行一些操作。關閉了控制代碼,只是表示本程序已經不再需要操作這個核心物件。

關閉執行緒控制代碼同理,僅僅表示本程序的其他執行緒不再需要操作這個執行緒,和是否撤銷程序的執行沒有關係,而撤銷執行緒才真正會使執行緒退出。

在程式設計中,控制代碼是一種特殊的智慧型指標 。當乙個應用程式要引用其他系統(如資料庫、作業系統)所管理的記憶體塊或物件時,就要使用控制代碼。

控制代碼與普通指標的區別在於,指標包含的是引用物件的記憶體位址,而控制代碼則是由系統所管理的引用標識,該標識可以被系統重新定位到乙個記憶體位址上。這種間接訪問物件的模式增強了系統對引用物件的控制。

在上世紀80年代的作業系統(如mac os 和windows)的記憶體管理中,控制代碼被廣泛應用。unix系統的檔案描述符基本上也屬於控制代碼。和其它桌面環境一樣,windows api大量使用控制代碼來標識系統中的物件,並建立作業系統與使用者空間之間的通訊渠道。例如,桌面上的乙個窗體由乙個hwnd型別的控制代碼來標識。如今,記憶體容量的增大和虛擬記憶體演算法使得更簡單的指標愈加受到青睞,而指向另一指標的那類控制代碼受到冷淡。儘管如此,許多作業系統仍然把指向私有物件的指標以及程序傳遞給客戶端的內部陣列下標稱為控制代碼。

控制代碼是乙個識別符號,是拿來標識物件或者專案的。應用程式幾乎總是通過呼叫乙個windows函式來獲得乙個控制代碼,之後其他的windows函式就可以使用該控制代碼,以引用相應的物件。

如果想更透徹一點地認識控制代碼,我可以告訴大家,控制代碼是一種指向

指標的指標。我們知道,所謂指標是一種

記憶體位址。應用程式啟動後,組成這個程式的各物件是駐留在記憶體中的。簡單地理解,似乎我們只要獲知這個記憶體的首位址,就可以隨時用這個位址訪問物件了。如果您真的這樣認為,那您可就大錯特錯了。我們知道,windows是乙個以

虛擬記憶體為基礎的作業系統。在這種系統環境下,windows

記憶體管理器經常在記憶體中來回移動物件,以此來滿足各種應用程式的記憶體需要。物件被移動意味著它的位址變化了。如果位址總是如此變化,我們該到**去找那乙個物件呢?

為了解決這個問題,windows作業系統為全體應用程式騰出一些記憶體單元,用來專門登記各應用程式的物件在記憶體中的位址的變化,而前者的實體地址在系統執行期間是始終保持不變的。windows

記憶體管理器移動了物件在記憶體中的位置後,會把該物件新的位址及時地告知給對應的控制代碼進行更新。這樣我們只要知道這個控制代碼,就可以間接地知道物件具體在記憶體中的哪個位置了。這個位址是在物件裝載(load)時由系統分配給的,當物件解除安裝時(unload)又釋放給系統。

建立執行緒後為什麼關閉了執行緒控制代碼,執行緒還是可以執行

建立執行緒後為什麼關閉了執行緒控制代碼,執行緒還是可以執行?主線程只要擁有執行緒控制代碼,事後就可以對執行緒執行某些操作,比如查詢執行緒狀態等等,靠的就是控制代碼,如果沒有控制代碼,系統就無從知道要查的是那個執行緒的狀態。但保持這個控制代碼不關閉,並不是執行緒執行的條件。關閉執行緒控制代碼只是釋放控...

借唄還完之後為什麼關閉了 為什麼螞蟻某唄被關閉了?

螞蟻金服被四部委約談後,金融科技監管環境發生了變化。螞蟻金服應四部委要求進行降槓桿操作,以防止發生資金鏈斷裂危機。為了更好的闡述原因,我需要闡述一下螞蟻金服的資金鏈斷裂風險 螞蟻在監管前使用的是100倍槓桿,簡單地說 就是螞蟻金服有一元錢,但是他借你100元。平常這麼幹沒有什麼事,因為螞蟻本身是記賬...

為什麼要建立執行緒池

在有些工作場景中,比如說伺服器程式設計中,如果為每乙個客戶都分配乙個新的工作執行緒,並且當工作執行緒與客戶通訊結束時,這個執行緒被銷毀,這就需要頻繁的切換工作執行緒,這會帶來一些負擔,最主要的是系統大的開銷和系統資源不足問題。首先,伺服器建立和銷毀工作執行緒的開銷很大,如果伺服器與很多客戶端通訊,並...