C# Interlocked类

Interlocked 类用于使变量的简单语句原子化。i++ 不是线程安全的,它的操作包括从内存中获取一个值,给该值递增 1,再将它存储回内存。这些操作都可能会被线程调度器打断。Interlocked 类提供了以线程安全的方式递增、递减、交换和读取值的方法。.

与其他同步技术相比,使用 Interlocked 类会快得多。但是,它只能用于简单的同步问题。

例如,这里不使用 lock 语句锁定对 someState 变量的访问,把它设置为一个新值,以防它是空的,而可以使用 Interlocked 类,它比较快:

lock (this)
{
  if (_someState == null)
  {
   _someState = newState;
  }
}

这个功能相同但比较快的版本使用了 Interlocked.CompareExchange()方法。

不是像下面这样在 lock 语句中执行递增操作:

public int State
{
  get
  {
    lock (this)
    {
      return ++ _state;
    }
  }
}

而使用较快的 Interlocked.Increment()方法: 

public int State 
{
  get => Interlocked.Increment(ref _state);
}