两个CPU可以同时持有两个“不同”的旋转锁吗?
所以......这是不是意味着:一个sigle(单处理器)CPU不能同时保存两个“不同”的自旋锁?
所以......这是不是意味着:单个CPU上的自旋锁数量不能超过> 1。
PS:“不同”暗示与不同内存资源相关联的自旋锁。
有人知道自旋锁是如何在内部工作的吗? ......我的意思是,他们在测试集操作期间是否冻结了总线?我用谷歌搜索但没有绝对答案。
答案 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
保证交换以原子方式发生在同一内存总线上的所有处理器上。因此它必须锁定内存总线,或至少强制特定缓存行的唯一所有权。