C#在锁定线程外克隆是否安全

时间:2018-10-26 07:50:39

标签: c# multithreading dictionary object thread-safety

使用此方法是否线程安全:

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;
    }
}

我问是因为尽管在第一个锁内进行深度克隆肯定会使其线程安全,但是作为一个大对象,由于较长的线程等待时间,克隆会导致执行速度变慢。

在此方法之外永远不会修改字典。

0 个答案:

没有答案