Singleton工厂成员职能线程安全

时间:2011-02-01 00:43:24

标签: c# multithreading singleton thread-safety factory

我想要一个生成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])
        }            

2 个答案:

答案 0 :(得分:1)

Dictionary<TKey, TValue>类型通常被认为对并发线程 read 是安全的,但所有写操作必须完全隔离(没有其他写入 - 或读取 - 同时时间)。如果您在施工后没有随时修改字典,那么您应该没问题。

答案 1 :(得分:0)

假设在构造函数完成后你永远不会更改字典中的值,那很好。 Dictionary<TKey, TValue>支持多个读者,只要没有任何作者。