我总是想知道它们是什么:每次我听到它们时,未来派飞轮式设备的图像都会在我的脑海中跳舞(滚动?)……
这些是什么?
答案
当您使用常规锁(互斥锁、临界区等)时,操作系统会将您的线程置于 WAIT 状态并抢占它通过在同一核心上调度其他线程来实现。
此外,内核对象并非在内核的每个状态下都可用,例如在中断处理程序中或分页不可用时等。
自旋锁不会导致抢占,而是在循环(“自旋”)中等待,直到另一个核心释放锁。量子并在锁释放后立即继续。
这就是为什么在单核机器上,自旋锁只是"禁用中断"或"引发 IRQL",完全阻止线程调度。
自旋锁最终允许内核避免"大内核锁"(内核进入内核时获取并在退出时释放的锁)并对内核原语进行粒度锁定,从而在多核机器上实现更好的多处理,从而获得更好的性能。
EDIT:出现了一个问题:“这是否意味着我应该尽可能使用自旋锁?”
正如我所提到的,自旋锁仅在预期等待时间短于量子(读:毫秒)并且抢占没有多大意义的地方有用(例如,内核对象不可用)。
如果%20waiting%20time%20is%20unknown,%20or%20if%20you%27re%20in%20user%20mode%20Spinlocks%20aren%27t%20efficient。%20You%20consume%20100%%20CPU%20time%20on%20the%20waiting
这是一个关于 SO 的问题:自旋锁,它们有多有用?