Я знаю, что у int не будет фиксированной позиции в памяти, поэтому он просто не может так работать. Но одна и та же часть кода будет выполняться одновременно с разными именами, параметрами и т.д.
Мне нужно по существу передать строку «Имя», а затем каким-то образом увеличить один из элементов в моем массиве int.
Dictionary<string, int> intStats = new Dictionary<string, int>();
Этот словарь хранит всю статистику на основе «Имени», предоставленного в качестве строкового ключа словаря.
И поскольку я использую МНОГО многопоточности, я хочу, чтобы счетчик int был как можно более синхронизирован. Вот почему я пытаюсь использовать Interlocked.Increment(ref intStats[theName]);
Но, к сожалению, это не сработает.
Есть ли альтернативы, которые будут работать для моей ситуации?
lock
словарь? Или создайте словарь блокировкиDictionary<string, object>
и заблокируйте один и тот же ключ, увеличивая его, чтобы уменьшить количество конфликтов. - person Ron Beyer   schedule 10.03.2018int
непосредственно в словаре. Инкапсулируйте целое число, а также любые атомарные операции над этим целым числом в пользовательском классе/типе. Используйте экземпляры объектов этого типа для значений словаря. Таким образом, вы получите что-то вродеDictionary<string, IntWithAtomicOperationsClass>
- person   schedule 10.03.2018ConcurrentDictionary
вместо простого словаря. В противном случае вам потребуется вручную синхронизировать доступ к словарю, чтобы избежать одновременного добавления новых значений под одним и тем же ключом. - person   schedule 10.03.2018