Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是+;=C#中的原子操作?_C#_Multithreading - Fatal编程技术网

是+;=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中的特定操作是原子操作不仅取决于操作本身,还取决于它应用于的数据类型。。。