我想要一个生成IPropertyMapper对象的单件工厂。工厂有一个字典,其中包含对Func委托的引用。字典是不可变的,我只想快速访问。下面的代码是否是线程安全的?调用Create()线程安全吗?
类定义:
public sealed class PropertyMapperFactory
{
private static readonly PropertyMapperFactory _instance = new PropertyMapperFactory();
private readonly Dictionary<int, Func<TResult>> _handlers;
private PropertyMapperFactory() {
this._handlers = new Dictionary<...>();
this._setTimeHandler();
}
public static PropertyMapperFactory GetFactory() {
return _instance;
}
//Is this thread safe?
public IPropertyMapper Create(UnitSetting _units ) {
return new PropertyMapper(this.handler[0])
}
答案 0 :(得分:1)
Dictionary<TKey, TValue>
类型通常被认为对并发线程 read 是安全的,但所有写操作必须完全隔离(没有其他写入 - 或读取 - 同时时间)。如果您在施工后没有随时修改字典,那么您应该没问题。
答案 1 :(得分:0)
假设在构造函数完成后你永远不会更改字典中的值,那很好。 Dictionary<TKey, TValue>
支持多个读者,只要没有任何作者。