C 系列 執行緒核心物件

2021-09-27 02:06:57 字數 1824 閱讀 4358

執行緒核心物件就是乙個包含了執行緒狀態資訊的資料結構。每次對createthread函式的成功呼叫,系統都會在內部為新的執行緒分配乙個核心物件。系統提供的管理執行緒的函式就是依靠訪問執行緒核心物件來管理實現的。

執行緒核心物件結構

1> 執行緒上下文控制代碼

每個執行緒都有自己的一組cpu暫存器,成為執行緒的上下文。這組暫存器的值儲存在乙個context結構裡,反映了該執行緒上次執行時cpu暫存器的狀態。

2> 使用技術usage count

該成員記錄執行緒核心物件的使用次數。使用技術初始狀態為2,建立乙個執行緒時,因為createthread函式返回了執行緒核心物件的控制代碼,相當於開啟一次,就促使usage count值加1。如果呼叫openthread函式,會再加1。

因此在使用完他們的控制代碼之後,一定要呼叫closehandle函式進行關閉。使usage count值減1.

如果在剛建立執行緒時呼叫closehandle函式關閉createthread函式返回的控制代碼,usage count值減為1,但執行緒沒有被終止。執行緒結束要關閉控制代碼,不然記憶體洩漏。

3> 暫停次數 suspend count

該成員用於指明執行緒的暫停計數。

dword resumethread(handle hthread); // 喚醒掛起執行緒

dword suspendthread(handle hthread); // 掛起執行緒

上面兩個函式用於減少或增加suspend count。

在相同優先順序下,當suspend count變為0時,系統可以排程該執行緒。

4> 退出** exit code

5> 是否受信 signaled

signaled指示了執行緒物件是否為受信狀態。執行期間false,即未受信,執行緒結束後,系統將其置為true,針對此物件的等待函式(如waitforsingleobject)就會返回。

該執行緒使用的堆疊被釋放。

系統將執行緒核心物件中的exitcode的值由still_active設定為執行緒函式返回的值。

系統將遞減執行緒核心物件中usage count的值。

執行緒終止的四種方法

1、執行緒函式自然退出。

2、使用exitthread函式來終止執行緒。

3、使用teriminatethread函式在乙個執行緒中強制終止另乙個執行緒的執行。

3、使用exitprocess函式結束程序。

執行緒自然退出這種情況時最安全的,但是其他三種方式會存在乙個問題,exitthread、teriminatethread、exitprocess為c風格的win32函式,不會呼叫c++的執行時,即在釋放資源的時候,析構函式不會被執行,具體例項如下:

示例

#include #include using namespace std;

class cmyobj

~cmyobj() };

int main()

正常執行結果

在main函式中新增exitthread()函式,則會出現問題,即析構函式不會被執行!

核心物件執行緒同步 信標核心物件

信標核心物件用於對資源進行計數。乙個使用數量 乙個是最大資源數量 用於標識信標能夠控制的資源的最大數量 乙個是當前資源數量 用於標識當前可以使用的資源的數量 如果當前資源的數量大於0,則發出信標訊號。如果當前資源數量是0,則不發出信標訊號。系統決不允許當前資源的數量為負值。當前資源數量決不能大於最大...

執行緒同步 核心物件實現執行緒同步 事件核心物件

1 事件核心物件23 事件型別物件有兩種不同型別,手動重置和自動重置 4手動重置 當乙個手動重置物件被觸發時候,等待該物件的所有執行緒變為可排程。5自動重置 當乙個自動重置物件被觸發時,只有乙個等待該事件的執行緒會變為可排程67 下面是乙個建立事件核心物件的函式 8handle createeven...

執行緒核心物件對比

執行緒的核心物件主要有event,waitabletimer,semaphore,mutex.他們的共同點 1.有signaled和nonsignaled兩程狀態。2.有手動和自動兩種模式。waitabletimer waitabletimer特點比較鮮明,它到了設定的時間後,就自動切到signal...