阅读:5381回复:5
请教ExAcquireResourceExclusiveLite函数?
BOOLEAN
ExAcquireResourceExclusiveLite( IN PERESOURCE Resource, IN BOOLEAN Wait ); 这个函数有个参数Resource到底是做什么用的? 我发现ddk源代码也只是忽而ExAcquireResourceExclusiveLite, 忽而ExReleaseResourceLite,从来不会直接访问Resource的内容。 俺的想法,还以为ExAcquireResourceExclusiveLite成功以后好歹 要开始访问一下Resource。不解! |
|
|
沙发#
发布于:2005-06-14 17:08
而且我发现很多结构里都有ERESOURCE Resource这么个变量。
|
|
|
板凳#
发布于:2005-06-14 18:23
ERESOURCE 一种同步机制的object,保护一个共享的数据结构,类似于sempahore,mutex,当然不需要直接去访问resource结构本身了。
用于一个writer,多个reader的情况,就是一个读写锁。主要文件系统驱动用ERESOURCE. 当线程想修改一个共享的数据结构的时候,它必须独占的获得这个object,如果仅仅去读共享结构,它只需共享的获得这个object就可以了 ExAcquireResourceExclusiveLite就是因为要去修改ERESOURCE保护共享数据,要独占这个resource,修改完后,要及时调ExReleaseResourceLite释放,其它线程才能访问共享的数据 |
|
地板#
发布于:2005-06-15 09:43
ERESOURCE 一种同步机制的object,保护一个共享的数据结构,类似于sempahore,mutex,当然不需要直接去访问resource结构本身了。 再补充一下 由于文件系统设计时涉及Cache Manager, VMM等部件,又有FastIO和Normal I/O的不同路径,他们之间有互相交错的recursive引用,但在多线程条件下,必须保证一个锁序列,违背这个锁序列,就可能导致死锁。所以有时在CallBack函数中必须调用ExAcquireResourceExclusiveLite,保持锁序列,然后在释放的CallBack函数中必须调用ExReleaseResourceLite释放 |
|
|
地下室#
发布于:2005-06-15 09:45
茅塞顿开呀!谢谢老大!
|
|
|
5楼#
发布于:2005-06-15 10:04
解释入木三分,我受益匪浅!
|
|
|