通过从IDictionary派生并定义一个私有SyncRoot对象,我能够在C#中实现一个线程安全的字典:
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(...);
}
虽然我成功让它工作了,但这导致了一些丑陋的代码。我的问题是,是否有更好、更优雅的方法来实现一个线程安全的字典?