Нужно ли применять блокировку даже при доступе к параллельному словарю

Я использую статический параллельный словарь в веб-API, и он доступен для всех пользователей.

Я использую методы ниже: все эти методы потокобезопасны? Или я должен добавить lock() хотя это ConccurentDictionary?

По сути, к нему обращаются все пользователи, поэтому он должен иметь возможность работать соответствующим образом, так как этот словарь содержит коллекцию для каждого пользователя и полагается на это.

static ConcurrentDictionary<string, SApp> SAppFarm= new ConcurrentDictionary<string, SApp>();    

.TryRemove(_sessionUser,out s);
.TryAdd(_sessionUser, r);
.GetOrAdd(sessionUser, application);

1 ответ

Решение

ConcurrentDictionary это задокументировано здесь потокобезопасно. Это включает в себя TryRemove, TryAdd а также GetOrAdd методы.

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

Другие вопросы по тегам