gpt4 book ai didi

.net - 是什么提供了自旋锁的有效性?

转载 作者:行者123 更新时间:2023-12-01 10:49:16 25 4
gpt4 key购买 nike

自旋锁可能只对具有真正并行性的系统有效,即多核/处理器系统。由于他们的设计,这并不奇怪。

尽管如此,共享资源的线程必须在不同的内核上执行。其他情况与单处理器系统类似。

这只是概率问题还是调度程序试图将互锁线程放在不同的 CPU 上以提供真正的并发性?

最佳答案

线程上下文切换的成本是自旋锁有用的原因。对于 Windows 上的开关,通常引用的数字在 2000 到 10,000 个 cpu 周期之间。必须存储和重新加载处理器状态以及由于保证缓存未命中而导致的停顿相关的成本。这纯粹是开销,没有做任何有用的事情。

因此,如果程序等待锁可用,耗费数千个周期并定期尝试进入锁,则程序可以执行得更好。如果预计锁会快速可用,则可以避免上下文切换。

没有计时器可以等待这么短的持续时间,它是通过用一个小循环实际燃烧循环来实现的。纺纱。这在处理器级别得到支持,专用的 PAUSE 机器代码指令可用于减少在 Intel/AMD 内核上旋转时消耗的功率。 .NET 中的 Thread.Yield() 和 Thread.SpinWait() 利用了它。

实际上,在代码中有效地使用自旋锁可能很棘手,当然只有在获得锁的几率足够高的情况下才能很好地发挥作用。如果它们不是,那么自旋锁是非常有害的,因为它延迟了上下文切换,而上下文切换可能需要让另一个线程重新获得处理器并释放锁。 .NET 4.0 SpinLock 类很有用,它生成 ETW events对于失败的旋转。否则well documented .

关于.net - 是什么提供了自旋锁的有效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com