Mex*_*Dev 10 c# multithreading
我有一个函数,它根据Key(名称)返回字典上的条目,如果它不存在,则返回一个新创建的条目.
我的问题是"双锁":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;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
这是有效的 - 在.NET中递锁是递归的.它是否真的是一个好主意是另一回事......相反如何:
public Machine SomeFunction(string name)
{
lock (_dictionary)
{
Machine result;
if (!_dictionary.TryGetValue(name, out result))
{
result = CreateMachine(name);
_dictionary[name] = result;
}
return result;
}
}
// This is now *just* responsible for creating the machine,
// not for maintaining the dictionary. The dictionary manipulation
// is confined to the above method.
private Machine CreateMachine(string name)
{
return new Machine(name);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2067 次 |
最近记录: |