关闭事件对象是否会导致等待该对象的线程唤醒?

Nat*_*ith 8 windows

假设我有一个 Windows 事件对象,例如通过调用CreateEvent.

线程 A 被阻塞WaitForSingleObject(event_handle)

线程 B 调用CloseHandle(event_handle).

问题1:线程A发生了什么?

问题2:线程A被阻塞有什么影响吗WaitForMultipleObjects?返回什么WaitForMultipleObjects

Nat*_*ith 2

从实验来看,如果句柄关闭,似乎WaitForSingleObject不会唤醒,即线程A一直等待。我没有检查过,但我认为WaitForMultipleObjects是一样的。

我怀疑发生的事情是内核内的事件对象是引用计数的。CloseHandle删除引用,但不一定会破坏底层对象。(例如,如果多个进程持有同一个对象的句柄,则在所有进程调用 之前,该对象不会被销毁CloseHandle。)并且WaitForSingleObject还获取对其等待的对象的引用。当然,我没有 Windows 源代码,所以我无法确定这一点。