gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:32:20 25 4
gpt4 key购买 nike

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

线程 A 在 WaitForSingleObject(event_handle) 中被阻塞。

线程 B 调用 CloseHandle(event_handle)

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

问题 2:如果线程 A 在 WaitForMultipleObjects 中被阻塞,会有什么不同吗? WaitForMultipleObjects 返回什么?

最佳答案

根据实验,如果句柄关闭,WaitForSingleObject 似乎不会唤醒,即线程 A 一直在等待。我没有检查过,但我假设 WaitForMultipleObjects 是一样的。

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

关于windows - 关闭事件对象是否会导致等待该对象的线程唤醒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com