fivelake
驱动牛犊
驱动牛犊
  • 注册日期2005-12-16
  • 最后登录2017-04-29
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望92点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1904回复:6

请教,如何在PASSIVE LEVEL保证某一组操作的原子性?

楼主#
更多 发布于:2008-08-22 16:10
我现在需要在一个进程中,unmap掉一个虚拟地址,然后马上map到另外一个地方,在执行的时候,很可能另外一个线程会插进来,导致我刚刚unmap掉的地址还没有被我map前就被另外一个线程抢掉了。那么如何保证我在做这两个动作时候能够不被其他线程打断?
我试过
1。把 IRQL提高到DPC Level,但是unmaplockedpage不能在DPC LEVEL上调用。
2。我把thread优先级提高到最高,似乎还是不行。
3。曾经想过屏蔽中断,但那个会影响操作系统行为,有点危险
有没有更好的办法?
flyingkisser
驱动牛犊
驱动牛犊
  • 注册日期2005-04-09
  • 最后登录2011-01-05
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望48点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-08-25 12:18
用内核同步对象,如mutex。
访问资源前等这个mutex,访问完释放掉,就可以保证同步了。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-08-25 14:51
是的,可以通过event,mutex来保护临界区
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
fivelake
驱动牛犊
驱动牛犊
  • 注册日期2005-12-16
  • 最后登录2017-04-29
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望92点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2008-08-25 16:00
问题是我不能控制其他线程的行为,因为我是处在某个进程空间里面的驱动程序,无法保证App在占用某个资源的时候,会合驱动进行同步。这个才是问题所在

引用第1楼flyingkisser于2008-08-25 12:18发表的  :
用内核同步对象,如mutex。
访问资源前等这个mutex,访问完释放掉,就可以保证同步了。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地下室#
发布于:2008-09-01 12:50
内核可以使用自旋锁,保证多线程,多处理器安全
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
Authority
驱动牛犊
驱动牛犊
  • 注册日期2005-08-26
  • 最后登录2008-10-04
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-09-13 13:52
引用第4楼znsoft于2008-09-01 12:50发表的  :
内核可以使用自旋锁,保证多线程,多处理器安全
Sakura
seanwan
驱动牛犊
驱动牛犊
  • 注册日期2007-08-20
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望96点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-09-14 14:02
引用第4楼znsoft于2008-09-01 12:50发表的  :
内核可以使用自旋锁,保证多线程,多处理器安全


大牛能不能说详细一点?我们也遇到了同样的问题,而且貌似没有很好的解决方法:
我的理解是就算进程A使用了自旋锁,在它获得自旋锁并使用某资源的时候,另一个不使用这个自旋锁的进程B(高于DPC level的驱动例程)一样有可能不受限制的去和进程A竞争某一个硬件资源。
游客

返回顶部