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

在多线程环境中返回c#中的字典

发布时间:2020-12-14 06:06:05 所属栏目:Java 来源:网络整理
导读:我已经宣布了一个词典的字典: DictionaryString,DictionaryString,String values; 我有一个getter来获取特定索引的字典: public DictionaryString,String get(String idx){ lock (_lock) { return values[moduleName]; }} 如您所见,我正在多线程环境中工作
我已经宣布了一个词典的字典:
Dictionary<String,Dictionary<String,String>> values;

我有一个getter来获取特定索引的字典:

public Dictionary<String,String> get(String idx)
{
    lock (_lock)
    {
        return values[moduleName];
    }
}

如您所见,我正在多线程环境中工作.
我的问题是我需要返回我的字典的副本,以便像这样线程安全:

public Dictionary<String,String> get(String idx)
{
    lock (_lock)
    {
        return new Dictionary<string,string>(values[moduleName]);
    }
}

如果我不这样做,那么调用getter的类会收到一个副本(所以如果我从我的Dictionary< String,Dictionary< String,String>>中删除这个字典,它仍然可以工作)?

干杯,

蒂埃里.

解决方法

如果你真的需要返回字典本身,那么你将需要有关于线程如何锁定它的规则(脆弱,如果有一个案例没有?),在只读中使用它方式(字典对于只读是线程安全的,但请注意,这假定该类的私有代码不再写入它),使用线程安全字典(ConcurrentDictionary使用条带锁定,我的 ThreadSafeDictionary使用无锁方法,有不同的场景,其中一个击败另一个),或按照你的建议制作副本.

或者,如果您公开一个方法来检索或设置两个键找到的最终字符串,枚举键找到的二级键,依此类推,那么您不仅可以控制一个键完成的锁定但是它在界面清洁和从界面中释放实现方面有其他优势(例如,您可以从基于锁的移动到使用线程安全的字典,或者反过来,而不影响调用代码).

(编辑:李大同)

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

    推荐文章
      热点阅读