2011-06-14 49 views

回答

3

有一個非常大的差異。雖然KeReadStateSemaphore只是簡單地返回信號的狀態,但如果等待得到滿足(即副作用是減小信號狀態),則超時爲0的KeWaitForSingleObject實際上會處理副作用。使用前者進行輪詢,並使用後者嘗試獲取信號量而無需等待。

+0

因此,如果thread-A調用KeWaitForSingleObject並且沒有釋放信號量,那麼線程-B可以調用KeWaitForSingleObject並將timeout設置爲0並獲取信號量?對線程A的KeReleaseSemaphore調用會有什麼影響? – lalli 2011-06-14 12:30:38

+0

@lalli:不,如果第一個線程沒有釋放信號量,那麼當第二個線程調用KeWaitForSingleObject時什麼都不會發生。當它被釋放時什麼都不會發生,因爲沒有線程在信號量上等待。 – wj32 2011-06-14 14:01:07

相關問題