У меня есть функция, которая возвращает запись в словаре на основе ключа (name), а если она не существует, возвращает вновь созданный.
У меня есть вопрос с "двойной блокировкой": SomeFunction блокирует _dictionary, чтобы проверить наличие ключа, затем вызывает функцию, которая также блокирует тот же словарь, кажется, работает, но я не уверен, что существует потенциальная проблема с этим подходом.
public Machine SomeFunction(string name)
{
lock (_dictionary)
{
if (!_dictionary.ContainsKey(name))
return CreateMachine(name);
return _dictionary[name];
}
}
private Machine CreateMachine(string name)
{
MachineSetup ms = new Machine(name);
lock(_dictionary)
{
_ictionary.Add(name, ms);
}
return vm;
}