使用此方法是否线程安全:
private Dictionary<int,myObject> myDict = new Dictionary<int,myObject>();
private static object _syncRoot = new object();
void updateDict(int i)
{
myObject obj = null;
lock(_syncRoot)
{
myDict.TryGetValue(i, out obj);
}
if(obj==null) obj = new myObject();
else
{
obj = DeepClone(obj);
}
//perform operations on obj
lock(_syncRoot)
{
myDict[i] = obj;
}
}
我问是因为尽管在第一个锁内进行深度克隆肯定会使其线程安全,但是作为一个大对象,由于较长的线程等待时间,克隆会导致执行速度变慢。
在此方法之外永远不会修改字典。