Безопасно ли использовать этот метод в многопоточном режиме:
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;
}
}
Я спрашиваю, потому что, хотя перемещение глубокого клонирования в первом замке определенно сделает его безопасным для потоков, но это большой объект, который приведет к клонированию.замедлить выполнение из-за большего времени ожидания потока.
Словарь никогда не изменяется вне этого метода.