1
KeWaitForSingleObject
與超時設置爲0和KeReadStateSemaphore
之間是否有區別?KeWaitForSingleObject與0超時和KeReadStateSemaphore之間的差異
KeWaitForSingleObject
與超時設置爲0和KeReadStateSemaphore
之間是否有區別?KeWaitForSingleObject與0超時和KeReadStateSemaphore之間的差異
有一個非常大的差異。雖然KeReadStateSemaphore
只是簡單地返回信號的狀態,但如果等待得到滿足(即副作用是減小信號狀態),則超時爲0的KeWaitForSingleObject
實際上會處理副作用。使用前者進行輪詢,並使用後者嘗試獲取信號量而無需等待。
因此,如果thread-A調用KeWaitForSingleObject並且沒有釋放信號量,那麼線程-B可以調用KeWaitForSingleObject並將timeout設置爲0並獲取信號量?對線程A的KeReleaseSemaphore調用會有什麼影響? – lalli 2011-06-14 12:30:38
@lalli:不,如果第一個線程沒有釋放信號量,那麼當第二個線程調用KeWaitForSingleObject時什麼都不會發生。當它被釋放時什麼都不會發生,因爲沒有線程在信號量上等待。 – wj32 2011-06-14 14:01:07