同一个处理器上的两个自旋锁?

时间:2010-08-05 11:38:57

标签: kernel driver multiprocessing wdm wdf

  1. 两个CPU可以同时持有两个“不同”的旋转锁吗?

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

  3. 所以......这是不是意味着:单个CPU上的自旋锁数量不能超过> 1。

  4. PS:“不同”暗示与不同内存资源相关联的自旋锁。


    有人知道自旋锁是如何在内部工作的吗? ......我的意思是,他们在测试集操作期间是否冻结了总线?我用谷歌搜索但没有绝对答案。

1 个答案:

答案 0 :(得分: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保证交换以原子方式发生在同一内存总线上的所有处理器上。因此它必须锁定内存总线,或至少强制特定缓存行的唯一所有权。