假设我有一个 Windows 事件对象,例如通过调用CreateEvent.
线程 A 被阻塞WaitForSingleObject(event_handle)。
线程 B 调用CloseHandle(event_handle).
问题1:线程A发生了什么?
问题2:线程A被阻塞有什么影响吗WaitForMultipleObjects?返回什么WaitForMultipleObjects?
从实验来看,如果句柄关闭,似乎WaitForSingleObject不会唤醒,即线程A一直等待。我没有检查过,但我认为WaitForMultipleObjects是一样的。
我怀疑发生的事情是内核内的事件对象是引用计数的。CloseHandle删除引用,但不一定会破坏底层对象。(例如,如果多个进程持有同一个对象的句柄,则在所有进程调用 之前,该对象不会被销毁CloseHandle。)并且WaitForSingleObject还获取对其等待的对象的引用。当然,我没有 Windows 源代码,所以我无法确定这一点。
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |