我有一个函数,它根据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) 我"需要"一种更好的方法来从位掩码生成一个对象集合(一个ushort传递,在二进制形式上它被解释为一个掩码)
简单,非优雅的解决方案是:
public static Things[] Decode(ushort mask)
{
switch (mask)
{
case 1: // 1
return new[] { new Thing(0) };
case 2: //10
return new[] { new Thing(1) };
case 3: // 11
return new[] { new Thing(1), new Thing(0) };
case 4: // 100
return new[] { new Thing(2) };
case 5: // 101
return new[] { new Thing(2), new Thing(0) };
Run Code Online (Sandbox Code Playgroud)
// so on ......