2010-08-05 14 views
2
  1. 两个CPU可以同时同时保存两个“不同的”自旋锁吗?在同一处理器上的两个自旋锁?

  2. 所以......这是否意味着:一个sigle(单处理器)CPU不能同时持有两个“不同的”螺旋锁?

  3. 那么......这是否意味着:自旋锁在单CPU上的号码不能是> 1

PS:用不同的内存资源相关的“不同”意味着自旋锁。


有没有人知道螺旋锁是如何在内部工作的? ...我的意思是,他们是否在测试设置操作期间冻结了公交车?我用Google搜索,但没有绝对的答案。

回答

2

自旋锁或多或少只是一个共享int,写入是同步的。处理器没有特殊标志。所以你可以获得更多的自旋锁。 (你不应该......)

为了防止单处理器系统被锁住,windows会将IRQL提升到DISPATCH_LEVEL。处理器只能在DISPATCH_LEVEL上运行一个“线程”,因此在同一时间锁定多个自旋锁对于这些系统是安全的。

的实施应该是这样的:(不是100%正确的,可由于发散细节)

LONG lock = 0; 

KeAcquireSpinlock(...) 
{ 
    // raise irql. etc. 
    while(InterlockedExchange(&lock, 1) != 0) 
     /* do nothing*/; 
} 

KeReleaseSpinLock(...) 
{ 
    InterlockedExchange(&lock, 0); 
    // lower irql ... etc. 
} 

InterlockedExchange保证了交换发生原子为同一存储器总线上所有的处理器。所以它必须锁定内存总线,或者至少强制特定缓存行的唯一所有权。

+0

“处理器只能在DISPATCH_LEVEL上运行一个'线程',因此同时锁定多个自旋锁,在这些系统上是安全的。” 这是信息。失踪。感谢这清除了我对单处理器螺旋锁的怀疑。 – bakra 2010-08-05 12:24:03

相关问题