Windows 超时为0的KeWaitForSingleObject与KeReadStateSemaphore之间的差异

Windows 超时为0的KeWaitForSingleObject与KeReadStateSemaphore之间的差异,windows,semaphore,wdk,Windows,Semaphore,Wdk,超时设置为0的KeWaitForSingleObject和kereadstatesmaphore之间有什么区别吗?有很大的区别。虽然kereadstatesmaphore仅返回信号量的状态,但如果满足等待,超时为0的KeWaitForSingleObject将实际处理副作用(即副作用是减少信号状态)。使用前者进行轮询,然后使用后者尝试在不等待的情况下获取信号量。因此,如果线程a调用KeWaitForSingleObject并且尚未释放信号量,线程B是否可以在超时设置为0的情况下调用KeWaitF

超时设置为0的
KeWaitForSingleObject
kereadstatesmaphore
之间有什么区别吗?

有很大的区别。虽然
kereadstatesmaphore
仅返回信号量的状态,但如果满足等待,超时为0的
KeWaitForSingleObject
将实际处理副作用(即副作用是减少信号状态)。使用前者进行轮询,然后使用后者尝试在不等待的情况下获取信号量。

因此,如果线程a调用KeWaitForSingleObject并且尚未释放信号量,线程B是否可以在超时设置为0的情况下调用KeWaitForSingleObject并获取信号量?那么线程A上对KeReleaseSemaphore的调用会产生什么影响?@lalli:不会,如果第一个线程没有释放信号量,那么第二个线程调用KeWaitForSingleObject时不会发生任何事情。当它被释放时,也不会发生任何事情,因为没有线程在等待信号量。