加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在同一个线程内锁定字典

发布时间:2020-12-15 03:52:31 所属栏目:百科 来源:网络整理
导读:我有一个函数返回一个字典上的一个条目,基于Key(名称),如果不存在,返回一个新创建的. 我有一个问题是“双锁”:SomeFunction锁定_dictionary,检查密钥的存在,然后调用一个也锁定相同字典的函数,似乎工作,但我不知道是否有这种方法的潜在问题. public Machine
我有一个函数返回一个字典上的一个条目,基于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;
}

解决方法

这是保证工作 – 锁在.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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读