0

Я использую статический параллельный словарь в веб-api и к нему обращаются через пользователей.Нужно ли применять блокировку даже при доступе к параллельному словарю

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

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

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

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

https://msdn.microsoft.com/en-us/library/dd287191(v=vs.110).aspx#Thread%20Safety, так что нет необходимости блокировать методы, указанные вами – prof1990

+0

От MSDN: _Рекомендует поточно-безопасный сбор пар ключ/значение, к которым можно получить доступ несколькими потоками одновременно._ – Fabio

+0

Я, его потокобезопасный, я прошел через msdn, но не уверен, что все методы слишком поддерживают его. В моем случае это будет только один доступ к ключам за поток и добавить/обновить его значение в том же потоке, тогда я не думаю, что беспокоиться даже об операции изменения. Каждый ключ для отдельного потока запросов пользователя. и каждый пользователь работает над объектом этого ключа для операции добавления/редактирования. – dsi

ответ

3

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

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

+0

ok, поэтому для моего случая он будет иметь только один ключ доступа к потоку и добавить/обновить его значение в том же потоке, тогда я не думаю, что беспокоиться даже об операции изменения. Каждый ключ для отдельного потока запросов пользователя. и каждый пользователь работает над объектом этого ключа для операции добавления/редактирования. Правильно, правда? – dsi

+0

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

+0

Хорошо. Благодарю. понят. – dsi

 Смежные вопросы

  • Нет связанных вопросов^_^