Interlocked类用于使变量的简单语句原子化。i++不是线程安全的,它的操作包括从内存中获取一个值,给该值递增1,再将它存储回内存。这些操作都可能会被线程调度器打断。Interlocked类提供了以线程安全的方式递增、递减、交换和读取值的方法。
与其他同步技术相比,使用Interlocked类会快得多。但是,它只能用于简单的同步问题。
例如,这里不使用lock语句锁定对someState变量的访问,把它设置为一个新值,以防它是空的,而可以使用Interlocked类,它比较快:
lock (this)
{
if (_someState == null)
{
_syncRoot = newState;
}
}
这个功能相同但比较快的版本使用了Interlocked.CompareExchange()方法。
不是像下面这样在lock语句中执行递增操作:
public int State
{
get
{
lock (this)
{
return ++_state;
}
}
}
而使用较快的Interlocked.Increment()方法:
public int State => Interlocked.Increment(ref _state);