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(...);
}
나는 그것을 작동시킬 수 있었지만 이로 인해 추악한 코드가 발생했습니다. 제 질문은 스레드로부터 안전한 사전을 구현하는 더 좋고 우아한 방법이 있습니까?