1 Вопрос: + = Атомарная операция в C #? [Дубликат]

вопрос создан в Thu, May 2, 2019 12:00 AM
    

На этот вопрос уже есть ответ здесь:

    

Я разрабатываю объект агрегации данных в многопоточной среде, и у меня следующая ситуация:

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;
}
    
0
  1. + = не является атомарной операцией. Вы должны использовать Interlocked.Increment.
    2019-05-02 15: 12: 30Z
  2. Нет. Кстати, гарантированно, что конкретная операция в .NET является атомарной, зависит не только от самой операции, но и от типа данных, к которому она применяется ...
    2019-05-02 15: 13: 23Z
1 ответ                              1                         

+= не является атомарной операцией. Вам следует использовать блокировку. Инкрементный метод .

    
1
2019-05-02 15: 14: 39Z
источник размещен Вот