是+;=C#中的原子操作?
我正在多线程环境中开发一个数据聚合对象,我有以下情况:是+;=C#中的原子操作?,c#,multithreading,C#,Multithreading,我正在多线程环境中开发一个数据聚合对象,我有以下情况: int counts; // This event is triggered by many threads at the same time public void OnDataReceived(DataEvent evt) { counts += evt.counts; } 我的问题是这样做是否安全 counts += evt.counts; 或者我需要类似的东西 lock(lockObject) { counts +
int counts;
// This event is triggered by many threads at the same time
public void OnDataReceived(DataEvent evt)
{
counts += evt.counts;
}
我的问题是这样做是否安全
counts += evt.counts;
或者我需要类似的东西
lock(lockObject)
{
counts += evt.counts;
}
+=
不是原子操作。你应该使用这个方法 +=不是原子操作。您应该使用Interlocked.Increment.Nope。顺便说一句,是否保证.NET中的特定操作是原子操作不仅取决于操作本身,还取决于它应用于的数据类型。。。