আইডি অভিধান থেকে প্রাপ্ত এবং একটি বেসরকারী সিঙ্করুট অবজেক্টটি সংজ্ঞায়িত করে আমি সি # তে একটি থ্রেড-নিরাপদ অভিধান প্রয়োগ করতে সক্ষম হয়েছি:
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...
}
আমি তখন আমার গ্রাহকরা (একাধিক থ্রেড) জুড়ে এই সিঙ্কআরট বস্তুটি লক করেছি:
উদাহরণ:
lock (m_MySharedDictionary.SyncRoot)
{
m_MySharedDictionary.Add(...);
}
আমি এটি কাজ করতে সক্ষম হয়েছি, তবে এর ফলে কিছু কুরুচিপূর্ণ কোড এসেছে। আমার প্রশ্ন হ'ল থ্রেড-নিরাপদ অভিধান বাস্তবায়নের জন্য আরও ভাল এবং আরও কি সুন্দর উপায় আছে?