eyeblue
驱动牛犊
驱动牛犊
  • 注册日期2002-06-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望13点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1386回复:3

KeRaiseIrql能代替spinlock吗

楼主#
更多 发布于:2004-01-29 17:03
文档说KeRaiseIrql可以防止cpu切换,那么是否可以用它来取代某些spinlock呢?

eyeblue
驱动牛犊
驱动牛犊
  • 注册日期2002-06-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望13点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-30 09:53
突然省悟了,提升级别只是保证当前的code不被中断,可并没有处理重入问题
spinlock则行

似乎原来的问题看来比较可笑了
eyeblue
驱动牛犊
驱动牛犊
  • 注册日期2002-06-03
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望13点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-30 09:48
我就是在指多cpu呀

文档说在调用KeGetCurrentProcessorNumber前,必须使用KeRaiseIrql防止此刻发生CPU切换而得不到正确的cpu number。
在DISPATCH_LEVEL情况,是不可能被中断的,多cpu也一样
这样,就引出我前面的疑问

ms有两篇配套的文章,里面也提到了spinlock在单cpu上确实只做了IRQL=DISPATCH_LEVEL,大家探讨一下吧
http://www.microsoft.com/whdc/hwdev/driver/IRQL.mspx
http://www.microsoft.com/whdc/hwdev/driver/LOCKS.mspx

wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-01-29 20:11
在单CPU上可以,我反汇编了他的代码,在单CPU上就是把IRQL提升到2的,不过在多CPU上恐怕不行,必须用SPINLOCK
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部