阅读:1489回复:5
关于驱动中的例程可否多次被系统调用,
当系统一次调用这个例程时,如果说这个例程还没有完成,系统有没有可能,再次调用....
举例:我有一个磁盘过滤驱动 在IRP_MJ_READ这个例程中,有一百行代码,现在刚好执行到50行,但是并没有返回,也没有等待,正在向下执行。 系统有没有可能刚好在这个时候,又调用这个例程呢。。。。 如何防止这个情况出现。。 我现在好像遇上这样的情况了。我的程序在刚好执行到一半时,修改了一个变量,结果上面又传了一个下来,也是要修改这个变量的,这下子就出错了。好像并没有执行完成,系统又在调用例程了。。请各位高人指点一下。谢谢。。 有没有可能出现,如果有可能,怎么防止。。 |
|
沙发#
发布于:2007-12-20 10:27
Read the docs about spink_lock and mutex
|
|
|
板凳#
发布于:2007-12-19 11:32
或者说,请老大们告诉我一个简单的同步方面..谢谢..
|
|
地板#
发布于:2007-12-19 11:28
多谢二位指教,,看来就是这个原因了.呵,谢谢..我试一下..
我想用全局变量让来判断,这个方法最简单,不过,有没有SLEEP这样的延时函数呀. 让他等待几秒钟,我看到有人调用过,不过,我调用时,总是说没有定义.请问,这个要包含那个头文件呀. |
|
地下室#
发布于:2007-12-19 08:59
这个问题当然可能发生,在我们的的想法中,每次都是排队读或写的。
但是系统可能不会这样处理,有几种耗费硬件资源可能是异步处理的。 如: 读, 写。 建义如下: 1,在读写例程中的函数,如果想保证唯一性。请使用同步。 2.注意死锁。 |
|
|
5楼#
发布于:2007-12-19 02:02
Yes. Dispatch routines must support multithreading and recursive calls.
"修改了一个变量": this "变量" must be a global variable. You should have synchronization mechanism, such as Mutex or EResource lock, to access it. |
|