Windows系统同步机制深度解析
1. 锁机制概述
在多处理器环境中,为了确保数据的一致性和线程的协调执行,操作系统需要各种同步机制。其中,自旋锁是一种基础的同步工具。有一种特殊的自旋锁,在没有写操作时允许非竞争的共享获取。当有写操作时,读者必须释放锁,且在写操作进行时,不允许新的读者获取锁。例如,当驱动开发者频繁遍历链表,但很少插入或删除项时,这种锁可以减少竞争,避免使用复杂的排队自旋锁。
2. 执行互锁操作
内核提供了一些基于自旋锁构建的简单同步函数,用于更高级的操作,如在单链表和双链表中添加和删除条目。这些函数包括单链表的 ExInterlockedPopEntryList 和 ExInterlockedPushEntryList ,以及双链表的 ExInterlockedInsertHeadList 和 ExInterlockedRemoveHeadList 等。这些函数都需要一个标准自旋锁作为参数,并且在整个内核和设备驱动代码中广泛使用。
与标准的获取和释放自旋锁的API不同,这些执行互锁操作的函数将所需代码内联,并使用不同的排序方案。标准的 Ke 自旋锁API先测试并设置位以检查锁是否释放,然后原子地执行锁定的测试和设置操作来获取锁;而这些函数则先禁用处理器上的中断,然后立即尝试原子测试和设置。如果初始尝试失败,会重新启用中断,并继续使用标准的忙等待算法,直到测试和设置操作返回0,此时整个函数会重新启动。因此,用于执行互锁函数的自旋锁不能与之前讨论的标准内核API一起使用,非互锁的列表操作也不能
超级会员免费看
订阅专栏 解锁全文
1592

被折叠的 条评论
为什么被折叠?



