ฉันสามารถใช้พจนานุกรมเธรดปลอดภัยใน 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(...);
}
ฉันสามารถทำให้มันใช้งานได้ แต่สิ่งนี้ส่งผลให้เกิดรหัสที่น่าเกลียด คำถามของฉันคือมีวิธีที่ดีกว่าและสวยงามกว่าในการใช้พจนานุกรมที่ปลอดภัยต่อเธรดหรือไม่?