ERESOURCE 相关函数的使用
来源:互联网 发布:上海游奇网络老板 编辑:程序博客网 时间:2024/06/14 16:45
原文连接
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/introduction-to-eresource-routines
内核资源对象,Ring0 的读写者机制。下面来简单学习一下它的使用。
获取和释放一个 ERESOURCE 结构
驱动可以使用ERESOURCE 结构来实现 独享/共享的同步。独享/共享的同步按照下面的方式工作:
- 任何数量的线程可以共享读取一个内核资源。
- 只有一个线程可以独享访问资源。当且仅当没有线程共享访问ERESOURCE 的时候,ERESOURCE 才可以被独占访问。
一个线程如果当前无法获得ERESOURCE ,可以选择等待,直到ERESOURCE 被得到。系统维护了两个线程链表,一个独占访问,一个共享访问。
- 独占/共享同步的一个典型的应用就是实现读写锁。一个读写锁允许多个线程共享读,但是只允许一个线程独占写。这可以直接通过(独占/共享)获得一个ERESOURCE 来实现。
驱动通过ExInitializeResourceLite 申请并初始化一个ERESOURCE结构。系统在一个链表中维护了所有的在使用的ERESOURCE 结构。当驱动不再需要一个特定的ERESOURCE,必须调用ExDeleteResourceLite 从系统链表中释放它。驱动可以调用ExReinitializeResourceLite 重用一个ERESOURCE。- 驱动可以在一个ERESOURCE 上执行下面的基本操作
- 调用ExAcquireResourceSharedLite 共享获得ERESOURCE。当且仅当没有正在独占访问,且没有独占访问的等待者。
- 调用ExAcquireResourceExclusiveLite 获得对于ERESOURCE的独占访问,当且仅当没有其它线程已经获得其独占访问。
- 转换一个独占访问为一个共享访问:ExConvertExclusiveToSharedLite。
- ExReleaseResourceLite 释放一个ERESOURCE。
- ExAcquireResourceSharedLite 和 ExAcquireResourceExclusiveLite 的 Wait 参数决定了当前线程是否等待直到获得了ERESOURCE。FALSE,当前得不到ERESOURCE的话,返回FALSE。TRUE,得不到的话,把当前线程放到恰当的ERESOURCE 等待链表中。
- 检查ERESOURCE 结构的状态
使用ExIsResourceAcquiredLite 或 ExIsResourceAcquiredSharedLite 判断ERESOURCE 是否已经被共享或者独占访问了。如果是的话,再调用ExIsResourceAcquiredExclusiveLite 判断是否是独占访问。- 使用ExGetSharedWaiterCount 判断当前等待共享访问的线程个数,使用ExGetExclusiveWaiterCount 判断当前等待独占访问的线程的个数。
阅读全文
0 0
- ERESOURCE 相关函数的使用
- 进程的相关函数使用
- mySQL相关函数的使用
- 进程的相关函数使用
- OpenCV形态学相关函数的使用测试。
- win32多线程的相关函数使用总结
- time及其相关函数的使用
- mysql 相关函数的使用情况
- 使用oracle遇到的相关函数
- javaScript正则表达式相关函数的使用
- Spiceserver内存操作相关函数的使用
- UCOSIII相关API函数的使用
- UCOSIII相关API函数的使用
- Mysql统计数据时相关函数的使用
- STL相关函数的使用分析
- fork函数的相关知识和使用
- JNI相关的函数使用方式
- Socket使用相关函数
- Error parsing HTTP request header--400 bad request
- 892767
- 数据一致性解决方案
- MT 103+ Single Customer Credit Transfer单笔客户转账
- valid-palindrome
- ERESOURCE 相关函数的使用
- Codeforces Round #435 (Div. 2) 题解
- 各版本JDK的新特性
- Spring AOP之通知(advice),连点(connetDoint),切点(pointcut),切点(aspect)
- 数据结构(Date Structures)
- 前缀树的实现
- 动态联动_Port
- length、lengthn、lengthc、lengthm用法介绍
- 面向对象程序设计上机练习三(有默认参数的函数)