【发布时间】:2012-02-17 12:47:29
【问题描述】:
我已经声明了一本字典:
Dictionary<String, Dictionary<String, String>> values;
我有一个获取特定索引处的字典:
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>> 中删除此字典,它是否仍然有效)?
干杯,
蒂埃里。
【问题讨论】:
-
你可能根本不应该返回字典,但如果你这样做了,那么是的,你需要在监视器内进行复制。你能描述一下这个结构的目的是什么吗?
-
我必须存储按模块排序的设置。所以每个模块都有一个设置字典,并且必须能够获取它们。配置管理器保留所有这些模块,以便它们可以轻松更新。
标签: c# concurrency dictionary return