jm_tang
驱动牛犊
驱动牛犊
  • 注册日期2001-05-08
  • 最后登录2002-05-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2780回复:6

什么是spin lock ,interlock

楼主#
更多 发布于:2001-10-18 22:56
在wdm中大量使用kexxxxspinlock,谁能讲讲什么是spinlock?什么是interlock?
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-10-19 09:17
  spinlock ,就是自旋锁,用在多CPU时,CPU之间的同步。
  
  获得一个spinlock的代码如下,
       while( testandset( spinlock,LOCKED)! = UNLOCKED ) ;
     或者用 exchange之类的指令来代替testandset,
           用带LOCK前缀的指令来锁定总线;
            
  释放的代码是:
         spinlock=UNLOCKED;

  
  interlock,用于多CPU时线程之间的同步;interlock之类的函数
 利用CPU提供的原子操作,执行一种功能. 如 interlockedexchange.
 这些功能要同时对一个操作数进行读和写。

 
 在NT系统中spinlock 可以这样实现:
 acquire:
      KeRaiseIRQL (IRQL_DPCL);  // 防止线程切换
      while(
         Interlocked_Set_SPInlock_And_Get_Old_VALUE
          ( SPINLOCK, LOCKED)
         !=UNLOCKED
    )
     KeLowerIRQL
 release:
      spinlock=UNLOCKED;
  
 

    


 
  

 
jm_tang
驱动牛犊
驱动牛犊
  • 注册日期2001-05-08
  • 最后登录2002-05-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-10-20 11:10
谢谢PPL!那么这两个LOCK,锁住的是总线了。锁的意思是不是只有当前的线程可以使用总线,其他线程等待,对其它进程呢?
还有,什么是原子操作?
lz_mao
驱动中牛
驱动中牛
  • 注册日期2001-09-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2001-10-24 10:27
首先,我认为并非锁住的是总线。spin lock是用来保护一些临界资源的。
其次,那些拥有了spin lock的线程,可以被那些运行在更高的IRQL上的线程所中断,当被中断时,当前线程势必释放spin lock。
然后,所谓原子操作,我认为就是一些功能的汇编指令。比如,典型的,需要一个原子的test-and-set指令去申请或释放spin lock。
我很笨。
z_j_cd
驱动中牛
驱动中牛
  • 注册日期2001-09-13
  • 最后登录2012-11-30
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-10-24 10:58
jm_tang你有没有读过操作系统的书,里面将原子操作很清楚,原子操作就是不能再运行期间被中断(线程、进程切换)的一段代码,也就是说,要么一次全部运行,要么就不一条也不运行
jm_tang
驱动牛犊
驱动牛犊
  • 注册日期2001-05-08
  • 最后登录2002-05-15
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-10-25 20:12
谢谢各位!
我半路出家,没有读过操作系统的书。
以前写过简单的VXD,现在看WDM,真是麻烦。
lz_mao
驱动中牛
驱动中牛
  • 注册日期2001-09-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2001-10-26 08:26
老兄:光谢谢有什么用?给人家分呀!
我很笨。
游客

返回顶部