я был в состоянии осуществить поточно-словарь в C#, выводя из IDictionary и определения частного объекта SyncRoot:Каков наилучший способ реализации потокобезопасного словаря?
public class SafeDictionary<TKey, TValue>: IDictionary<TKey, TValue>
{
private readonly object syncRoot = new object();
private Dictionary<TKey, TValue> d = new Dictionary<TKey, TValue>();
public object SyncRoot
{
get { return syncRoot; }
}
public void Add(TKey key, TValue value)
{
lock (syncRoot)
{
d.Add(key, value);
}
}
// more IDictionary members...
}
Я тогда блокировки на этом SyncRoot объекте в течение моих потребителей (несколько потоков):
Пример:
lock (m_MySharedDictionary.SyncRoot)
{
m_MySharedDictionary.Add(...);
}
Я был в состоянии сделать его работу, но это привело к некоторому уродливый код. Мой вопрос в том, есть ли лучший, более элегантный способ реализации потокобезопасного словаря?
Что это вы найдете некрасиво об этом? – 2008-10-01 14:43:29
Я думаю, что он ссылается на все заявления о блокировке, которые он имеет на протяжении своего кода среди потребителей класса SharedDictionary, - он блокирует код * вызывающего * каждый раз, когда он обращается к методу объекта SharedDictionary. – 2008-10-01 14:54:02
Вместо того, чтобы использовать метод Add, попробуйте сделать, присвоив значения ex-m_MySharedDictionary ["key1"] = "item1", это потокобезопасно. – testuser 2012-04-12 16:53:21