阅读:2017回复:5
Event 实现互斥接口是不是很有问题?(米办法,FastMutex & SpinLock 会提升 IRQL)
下面的接口可以实现多线程互斥吗? 注意 //**** 的注释
// // initialize the global data structures, when the driver is loading. // (Called in DriverEntry()) // NTSTATUS Dbg_LoadInit() { // Initialize the event KeInitializeEvent(&gs_eventEnableKeLog, SynchronizationEvent, TRUE); return STATUS_SUCCESS; } static void WaitForWriteMutex() { // Wait for enable log event KeWaitForSingleObject(&gs_eventEnableKeLog, Executive, KernelMode, TRUE, 0); KeClearEvent(&gs_eventEnableKeLog); //**** 上面两个函数的调用之间别个线程可能 wait 成功吗? } static void ReleaseWriteMutex() { // Set enable log event KeSetEvent(&gs_eventEnableKeLog, 0, FALSE); } |
|
|
沙发#
发布于:2008-02-02 18:20
Re:这样子的一个互斥接口是不是很有问题?
貌似 ExAcquireResourceForThreadLite() 系列能实现 PASSIVE LEVEL 的互斥?不过没有研究过.... |
|
|
板凳#
发布于:2008-02-02 21:00
压栈锁和信号量都不会引起的IRQL提升
|
|
|
地板#
发布于:2008-02-03 21:24
用interlock+KeDelayExecution比较好实现~
|
|
|
地下室#
发布于:2008-02-03 21:34
可以,而且SynchronizationEvent会自动把event置为无信号状态,所以KeClearEvent没有必要调用。
|
|
5楼#
发布于:2008-02-04 17:19
谢谢各位的回复,
![]() 这个互斥的应用: Windows 驱动:向 DbgPrintf 一样将调试信息输出到文件 http://bbs.driverdevelop.com/htm_data/16/0802/109099.html 欢迎各位大大提代码的意见!! |
|
|