windows - 关闭事件对象会导致等待该对象的线程唤醒吗?
问题描述
假设我有一个 Windows 事件对象,例如来自调用CreateEvent
.
线程 A 被阻塞在WaitForSingleObject(event_handle)
.
线程 B 调用CloseHandle(event_handle)
.
问题1:线程A会发生什么?
问题 2:如果线程 A 被阻塞,有什么不同WaitForMultipleObjects
吗?返回什么WaitForMultipleObjects
?
解决方案
从实验来看,如果句柄关闭似乎不会WaitForSingleObject
唤醒,即线程A一直在等待。我没有检查,但我认为是一样的。WaitForMultipleObjects
我怀疑发生了什么是内核中的事件对象被引用计数。CloseHandle
删除一个引用,但它不一定会破坏底层对象。(例如,如果多个进程持有同一个对象的句柄,则在所有进程调用 之前,该对象不会被销毁CloseHandle
。)并且WaitForSingleObject
还会引用它等待的对象。当然,我没有 Windows 源代码,所以我无法确定这一点。
推荐阅读
- c# - 创建多个以 ListBox 的项目命名的文件夹
- java - 问:从 Sql DB 中检索数据到 TextFields 中?
- sql - 比较 2 个表的子字符串
- python - 如何修复“'QuerySet' 对象没有属性 'posts'”
- c++11 - 使用 std::is_same 和运算符 || 的编译错误
- php - 解析JSON时未定义的索引PHP
- python - 张量流中的掩码张量部分,数据增强
- youtube-javascript-api - YouTube iFrame API,通过外部控件更改后获取当前字幕语言或内部播放器控件不起作用
- django - pytest - 如何修补方法以避免数据库调用
- php - 只进行一次查询并将其存储在数组中还是每次都进行查询更有效?