Tag: 自旋锁

何时应该&不应该使用此C#实用程序类通过Interlocked控制线程

我正在努力理解这个类的编写背后的逻辑,以及何时应该而且不应该使用它。 任何见解将不胜感激 internal struct SpinLock { private volatile int lockHeld; private readonly static int processorCount; public bool IsHeld { get { return this.lockHeld != 0; } } static SpinLock() { SpinLock.processorCount = Environment.ProcessorCount; } public void Enter() { if (Interlocked.CompareExchange(ref this.lockHeld, 1, 0) != 0) { this.EnterSpin(); } } private void EnterSpin() { int num […]

旋锁,它们有用吗?

您经常在代码中发现自己使用自旋锁吗? 遇到使用繁忙循环实际上优于锁的使用情况的情况有多常见? 就个人而言,当我编写某种需要线程安全的代码时,我倾向于使用不同的同步原语对其进行基准测试,并且就其而言,使用锁似乎比使用自旋锁具有更好的性能。 无论我实际持有锁的时间有多少,使用自旋锁时我收到的争用量远远大于使用锁时获得的数量(当然,我在多处理器机器上运行我的测试)。 我意识到它更可能遇到“低级”代码中的自旋锁,但我很想知道你是否发现它甚至可以用于更高级的编程?