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);
}