執行緒核心物件對比

2021-06-18 23:50:32 字數 1154 閱讀 2111

執行緒的核心物件主要有event,waitabletimer, semaphore,mutex.

他們的共同點:

1.      有signaled和nonsignaled兩程狀態。

2.      有手動和自動兩種模式。

waitabletimer

waitabletimer特點比較鮮明,它到了設定的時間後,就自動切到signaled,非常好理解。

event vs semaphore

semaphore最大的特點是,它可以同時set signaled和set nonsignaled多幾次。這個怎麼說呢。這個好比去遊戲廳玩街機。

如果那台街機是event的話,投乙個幣(setevent)就是signaled,當你掛掉(waitforxx)後就nonsignaled,想再玩的話必須再玩必須再投個幣(setevent)。它最大的特點是,當你沒掛,你setevent(投幣)多次是無效的。說白了event就是個投單幣系統。多投就會吞幣。

如果那台街機是semaphore的話,就跟正常的遊戲機一樣了,你投多次(releasesemaphore),你就可以多掛(waitforxx)幾次。跟真實的遊戲機一樣,它是允許最大投幣的限制,在semaphore的世界中,你要是一次性投(releasesemaphore)了超個機器的容量,結果會怎樣呢?答案還是吞幣,本次投幣無效。所以semaphore貌似是比event強大的,要是那樣,就是小看event,event還有大招沒出!那就是自殺(resetevent),而semaphore的使用者想掛掉,只能等系統(waitforxx)將你乾掉。

event  vs  mutex

mutex最大的特點是歸屬性。

mutex定的規則是,誰占用誰放,其它任何人誰也甭想走後門。具體是這樣:

1.      只要執行緒占用了mutex,在不釋放的情況下,自己可以waitforxx無數次,自己人,wait啥都不需要等待。其它執行緒waitforxx還是需要等待的。

2.      在規則1的這種情況下,其它執行緒不能呼叫releasemutex,強硬呼叫,此操作也會無效。

3.      直到擁有者執行緒releasemutex後,其它執行緒才有機會占用。

4.      其它執行緒占有後,就會應用規則1

這裡顯然比event嚴格,event沒有歸屬性,誰也無法占用它,任何執行緒都可以resetevent和setevent。

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

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

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

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

用核心物件進行執行緒同步 事件核心物件

事件核心物件 1.手動重置事件 當乙個手動重置事件被觸發的時候,所有等待該事件的執行緒都變為可排程狀態。所以要注意此時所有的執行緒都只能以唯讀的方式來訪問記憶體,這也是多個執行緒能夠同時執行的唯一原因 2.自動重置事件 當乙個自動重置事件被觸發的時候,只有乙個等待該事件的執行緒都變為可排程狀態 當執...