i++不是线程安全的。它的操作包括从内存中获取一个值,给该值增加1,再将它储存回内存。这些操作都有可能被线程高度器打断。InterLocked类提供了以线程安全方式增减、交换和读取值的方法。
但与其它的技术相比,2使用InterLocked类会快很多。但是它只能用于简单的同步问题。
lock (this) { if (someState == null) { someState = newState; } }
它等效于
Interlocked.CompareExchange<someState>(ref someState, newState, null);
自增操作
public int State
{
get
{
Interlocked.Increment(ref someState);
}
}