Мені вдалося реалізувати безпечний для потоків словник у 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(...);
}
Мені вдалося змусити його працювати, але це призвело до деякого потворного коду. Моє запитання: чи є кращий, більш елегантний спосіб реалізації безпечного для словника словника?