C#线程安全快速(est)计数器

在C#中获得线程安全计数器的最佳方式是什么?

这是如此简单:

public static long GetNextValue() { long result; lock (LOCK) { result = COUNTER++; } return result; } 

但有更快的select吗?

这会更简单:

 return Interlocked.Increment(ref COUNTER); 

MSDN Interlocked.Increment

根据其他人的build议, Interlocked.Increment将比lock()有更好的性能。 只要看看IL和Assembly,你会发现Increment变成了“总线locking”语句,其variables直接增加(x86)或者“增加”到(x64)。

这个“总线locking”语句locking总线,以防止另一个CPU在主叫CPU执行操作时访问总线。 现在,看看C# lock()语句的IL。 在这里,您将看到对Monitor调用,以便开始或结束一个部分。

换句话说,.net lock()语句比.Net Interlocked.Increment做的要多得多。

所以,如果你想要做的是增加一个variables, Interlock.Increment会更快。 查看所有联锁方法以查看各种可用的primefaces操作并find适合您需要的操作。 当你想做更复杂的事情,比如多个相关的增量/减量,或者序列化比整数更复杂的资源时,使用lock()

我build议你在System.Threading库中使用.NET内置的互锁增量。

下面的代码将通过引用来增加一个长variables,并且是完全线程安全的:

 Interlocked.Increment(ref myNum); 

资料来源: http : //msdn.microsoft.com/en-us/library/dd78zt0c.aspx

尝试与Interlocked.Increment