windows - 内核定时器对象和同步

标签 windows data-structures kernel timer

不知是否有人能简单地告诉我(我知道这不是一个简单的主题)内核定时器对象是如何用于同步对内核中数据结构的访问的?

编辑:

内核定时器对象是内核调度程序对象的一部分,内核调度程序对象是内核的一组同步对象。我还想知道计时器对象是否是线程在能够继续之前必须等待获取句柄的东西,或者它是线程等待获取句柄的计时器到期时触发的回调?

我希望这是有道理的。内核对我来说是一个新主题。

最佳答案

简短回答:计时器对象用于同步对内核中数据结构的访问。为此,NT 内核具有快速互斥、保护互斥、推锁、互斥对象等功能。我不太明白你的问题——你在说什么数据结构?不过,我将继续假定您想知道如何使用计时器对象。

有两种方法可以使用计时器对象。第一个是它们在指定的到期时间 后发出信号。因此,线程可能会使用 KeWaitForSingleObject 在计时器对象上等待,它只会在到期时间到来后醒来。您还可以为计时器使用周期性信号 - 您可能希望它在每次线程被唤醒时重置为非信号状态,并每隔几秒收到一次信号。

第二个(不太常见的)用途是计时器对象可以将 APC 插入到设置计时器的线程中。如果您不知道 APC 是什么 - 它是异步过程调用。如果线程执行 alertable wait ,插入的 APC 将中断等待并开始执行。当然,APC 使用起来很棘手,这就是为什么人们喜欢在线程池中注册计时器对象并由它负责处理回调(但这是另一个话题)。

关于windows - 内核定时器对象和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1993566/

相关文章:

windows - 如何在没有 Internet 连接的情况下在 ActivePerl 中安装软件包?

haskell - 这个二叉树代码如何表示一棵树?

c++ - setreuid() 失败,操作不允许

java - 将多个 ArrayLists 快速聚合成一个

data-structures - 反转查询区间内点的颜色

c - linux内核宏如何用作函数?

c - Linux 中标准库的头文件是如何安装的?

java - UNIX系统和Windows系统中读取.CSV文件的差异

c# - 是否可以识别exe是否是Windows服务?

c++ - Windows C++ 线程等待队列数据推送