執行緒與核心物件的同步

2021-04-20 03:17:47 字數 1391 閱讀 9110

1.使用者方式的執行緒同步具有速度快的優點。但是它的侷限性也是明顯的:互鎖函式只能在單值上執行,根本無法使執行緒進入等待狀態;可以使用關鍵**段使執行緒進入等待狀態,但是只能用這些**段對單個程序中的執行緒實施同步;而且使用關鍵**段時,很容易進入死鎖狀態,因為在等待進入關鍵**段時無法設定超時值。

2.使用核心物件來實現執行緒同步的乙個不足之處是它的速度比較慢,因為呼叫執行緒必須從使用者方式轉為核心方式。這個轉換需要很大的代價:往返一次需要占用x86平台上大約1000個cpu週期。

3.如下的一些核心物件可以處於已通知狀態或未通知狀態:程序、執行緒、作業、檔案、控制台輸入、檔案修改通知、事件、可等待定時器、信標、互斥物件。

4.使用waitforsingleobject來使執行緒自願進入等待狀態,直到乙個特定的核心物件變為已通知為之。該函式的返回值可以為:wait_object_0、wait_timeout、wait_failed。waitformultipleobjects允許呼叫執行緒同時檢視若干個核心物件的已通知狀態。

5.事件物件是最基本的核心物件,它包含乙個使用計數,乙個用於指明該事件是個自動重置的事件還是乙個人工重置的事件的bool值,另乙個是用於指明該事件處於已通知狀態還是未通知狀態的bool值。使用createevent、openevent、setevent以及resetevent來處理事件。

6.等待定時器是在某個時間或按規定的間隔時間發出自己的訊號通知的核心物件。用於設定定時器的函式有:createwaitabletimer、openwaitabletimer、setwaitabletimer、canclewaitabletimer。也可以使用setwaitabletimer讓等待定時器給apc排隊。

7.信標核心物件用於對資源進行計數。它包含兩個額外的兩個帶符號的32位值,乙個是最大資源數量,乙個是當前資源數量。最大資源數量用於信標能夠控制的資源的最大數量,而當前資源數量則用於標識當前可以使用的資源的數量:createsemaphore、opensemaphore、releasesemaphore。

8.互斥體(mutex)核心物件能夠確保執行緒擁有對單個資源的互斥訪問權。互斥體的行為特性與關鍵**區相同,但是互斥體屬於核心物件,而關鍵**段則屬於使用者方式物件。這意味著互斥體物件的執行速度比關鍵**區要慢。但也意味著不同程序中的多個執行緒能夠訪問單個互斥體物件,並且意味著執行緒在等待資源時可以設定乙個超時值:createmutex、openmutex、releasemutex。

9.互斥體物件乙個比較特殊的地方是互斥體物件有乙個"執行緒所有權"概念。互斥體物件能夠對哪個執行緒成功地等待到該物件進行跟蹤。不擁有該物件的執行緒試圖釋放的話返回false,並得到error_not_owner錯誤。

10.其他的一些執行緒同步函式:非同步裝置i/o、waitforinputidle、msgwaitformultipleobjects(ex)、waitfordebugevent、singleobjectandwait。

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

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

執行緒與事件核心物件的同步

1.建立事件核心物件 handle createevent psecurity attributes psa,bool fmenureset,bool finitialstate,pctstr pszname 從引數的名字上我們可以大概的猜出他們的意思 1參 核心物件的建立一般都有這個屬性 設定核心...

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

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