Tôi đã có thể triển khai Từ điển an toàn luồng trong C # bằng cách lấy từ IDictionary và xác định đối tượng SyncRoot riêng tư:
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...
}
Sau đó, tôi khóa đối tượng SyncRoot này trong suốt người tiêu dùng của tôi (nhiều chủ đề):
Thí dụ:
lock (m_MySharedDictionary.SyncRoot)
{
m_MySharedDictionary.Add(...);
}
Tôi đã có thể làm cho nó hoạt động, nhưng điều này dẫn đến một số mã xấu xí. Câu hỏi của tôi là, có cách nào tốt hơn, thanh lịch hơn để triển khai Từ điển an toàn luồng không?