windows – Linux spin_lock与NT KeAcquireSpinLock
从我可以收集到:
> NT的KeAcquireSpinLock相当于spin_lock_bh:一个将IRQL提升到DISPATCH_LEVEL,另一个屏蔽下半部分中断 – 功能相同.虽然NT变体保留了OldIrql,但Linux变体似乎并未在任何地方存储“wereInterruptsAlreadyMasked”.这是否意味着spin_unlock_bh总是取消屏蔽它们? 什么是相当于spin_lock的NT? 如果spin_unlock_bh总是取消屏蔽中断(在NT中说,总是将IRQL丢弃到< DISPATCH_LEVEL),这是否意味着spin_lock类似于KeAcquireSpinLockAtDpcLevel? 解决方法
当您知道没有中断或下半部分将争用锁时,可以使用原始spin_lock.通过避免中断屏蔽,可以减少中断延迟,同时仍然可以避免关键部分的互斥锁开销过短,从而导致旋转.
在实践中,它们似乎主要用于文件系统驱动程序之类的东西,用于锁定内部缓存结构,以及在持有锁时从不需要阻塞IO的其他东西.由于后半部分和驱动程序中断不会直接触及FS驱动程序,因此无需屏蔽中断. 我怀疑Windows等价物是CRITICAL_SECTION,或者NT内核API等价物;然而,与NT关键部分不同,Linux自旋锁在争用时不会回归到互斥锁;他们只是继续旋转. 并且,是的,spin_unlock_bh无条件地恢复了下半部分.您可以跟踪何时手动启用/禁用(因为您通常应该以相反的获取顺序释放锁定,这通常不是问题),或者只是求助于spin_lock_irqsave. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Win10 VMWare中运行WinPhone模拟器
- Windows – Jenkins不会使用Credential参数运行Start-Job
- windows – 需要XP管理员权限的旧应用程序
- 如何从SVG文件批量创建Windows中的图标webfonts
- Windows – 如何从CMD.exe切换到Powershell?
- 完全自动更新Windows
- 远程PowerShell脚本不适用Hyper-V快照
- Windows Phone 7 – Windows Phone 7 BarCode扫描库或功能?
- 在Windows和Linux上构建C
- windows-server-2008-r2 – 计划任务和环境变量
- 解决Windows 资源保护找到了损坏文件但无法修复问
- windows-server-2008-r2 – 如何从命令行向(本地
- 代理后面的Windows 7上的Git Bash不再工作
- 远程访问 – 如何在Windows 8 Professional上安装
- Windows计算机从标记VLAN获取SLAAC IPv6
- windows – 使用PowerShell每隔x秒运行一个批处理
- windows-phone-7 – WP7-ListBox:我应该使用Tap
- 如何强制执行Office 365自定义“角色分配策略”默
- 替换一个dll时出现.net DLL版本问题
- 使用CopSSH和MSysGit从Windows克隆git存储库