Безопасен ли поток AddOrUpdate в ConcurrentDictionary?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Безопасен ли поток AddOrUpdate в ConcurrentDictionary?

Сообщение Anonymous »

Я пытался использовать метод AddOrUpdate в ConcurrentDictionary.

Из раздела «Примечания» на этой странице https://msdn.microsoft.com/en-us/librar ... .110).aspx. . там написано


"Однако делегаты для этих методов вызываются вне блокировок, чтобы избежать проблем, которые могут возникнуть от выполнения неизвестного кода при блокировке. Следовательно, код, выполняемый этими делегатами, не подчиняется атомарности операции».


Поэтому я не уверен, что это потокобезопасно. У меня есть один случай: если ключ не найден, значение равно 1, иначе увеличьте значение на 1.

Я написал ниже функцию

Код: Выделить всё

    private static void AddOrUpdate(ConcurrentDictionary map)
{
Random r = new Random();
Thread.Sleep(r.Next(10));
map.AddOrUpdate(Key, 1, (key, value) => value + 1);
}

public static void TestThreadSafe(ConcurrentDictionary map)
{
Thread[] threads = new Thread[Size];
for (int i = 0; i < Size; ++i)
{
threads[i] = new Thread(() => AddOrUpdate(map));
}

foreach (var thread in threads)
{
thread.Start();
}
}
создал около 300 000 потоков и запустил их параллельно. Результат всегда 300 000.

Является ли метод, описанный выше, потокобезопасным? Когда AddOrUpdate не является потокобезопасным?

Подробнее здесь: https://stackoverflow.com/questions/391 ... dictionary
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ConcurrentDictionary и ConcurrentBag для AddOrUpdate параллельно
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Что добавить для части обновления в ConcurrentDictionary AddOrUpdate
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Метод ConcurrentDictionary AddOrUpdate, вызывающий исключение IndexOutOfRangeException
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • ArgumentNullException в ConcurrentDictionary.AddOrUpdate
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Метод ConcurrentDictionary.AddOrUpdate в C# насколько он эффективен?
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»