在方法开始时使用Volatile.Write的原因

问题描述 投票:0回答:2

[我想我对Volatile.WriteVolatile.Read的确切含义有所了解,但我已经看到一些示例,其中在C#的CLR书中,Volatile.Write在方法的开头使用,其中Jeffrey显示了使用Interlocked实现简单自旋锁。这是代码:

struct SimpleSpinLock {
   private int _resourceInUse; // 0 = false, 1 = true

   public void Enter() {
      while (true) {
         if (Interlocked.Exchange(ref _resourceInUse, 1) == 0) return;
      }
   }

   public void Leave() {
      Volatile.Write(ref _resourceInUse, 0); // Why is it here??
   }
}

据我所知,Volatile.Write用于保证高于其的指令将在Volatile.Write之前执行。但是在Leave方法中只有一条指令,在这里使用Volatile.Write的原因是什么?也许我理解事情完全错了,所以如果有人可以引导我走正确的道路,我将不胜感激。

c# .net multithreading volatile spinlock
2个回答
0
投票

0
投票

不会声称我有足够的才能完全理解/解释这一点,但这是我的5美分。首先,编译器可以内联Leave方法调用,因为它仅包含一行,因此实际写操作可能会被其他指令包围。次要的(主要是我想的)接下来是Volatile class docs状态:

© www.soinside.com 2019 - 2024. All rights reserved.