ks12345
驱动小牛
驱动小牛
  • 注册日期2006-09-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望223点
  • 贡献值0点
  • 好评度189点
  • 原创分0分
  • 专家分0分
阅读:2019回复:5

Event 实现互斥接口是不是很有问题?(米办法,FastMutex & SpinLock 会提升 IRQL)

楼主#
更多 发布于:2008-02-02 11:47
下面的接口可以实现多线程互斥吗? 注意 //**** 的注释
//
// 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);
}
Thinking
ks12345
驱动小牛
驱动小牛
  • 注册日期2006-09-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望223点
  • 贡献值0点
  • 好评度189点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-02-04 17:19
谢谢各位的回复,
  先用着吧,如果 AlexSho 所说无误,那就木有问题~~
这个互斥的应用:
Windows 驱动:向 DbgPrintf 一样将调试信息输出到文件
http://bbs.driverdevelop.com/htm_data/16/0802/109099.html

欢迎各位大大提代码的意见!!
Thinking
AlexSho
驱动牛犊
驱动牛犊
  • 注册日期2008-01-10
  • 最后登录2017-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望164点
  • 贡献值0点
  • 好评度45点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2008-02-03 21:34
可以,而且SynchronizationEvent会自动把event置为无信号状态,所以KeClearEvent没有必要调用。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2008-02-03 21:24
用interlock+KeDelayExecution比较好实现~
没有战争就没有进步 X3工作组 为您提供最好的军火
WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2008-02-02 21:00
压栈锁和信号量都不会引起的IRQL提升
驱动开发者 呵呵
ks12345
驱动小牛
驱动小牛
  • 注册日期2006-09-21
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望223点
  • 贡献值0点
  • 好评度189点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-02-02 18:20
Re:这样子的一个互斥接口是不是很有问题?
貌似 ExAcquireResourceForThreadLite() 系列能实现 PASSIVE LEVEL 的互斥?不过没有研究过....
Thinking
游客

返回顶部