这些单实例实现是否同样是线程安全的?

时间:2016-02-15 11:25:09

标签: c# static singleton

我相信第一个代码示例是一个简单的Singleton实现,我不确定它是否是线程安全的。作为类,EventSourceLogger派生自EventSource,它不是静态的,这个类本身不能只是一个静态类(这本来更方便 - 尽管在单一和静态之间进行权衡)。

为了简洁起见,我从一个更彻底的特定已知线程安全实现恢复到此实现 - 在同事代码中喜欢这种方法的外观之后。我丢了什么?

当前实施

[EventSource(Name = "EventSourceLogger")]
public class EventSourceLogger : EventSource
{
    public static readonly EventSourceLogger Logger = new EventSourceLogger();`
}

以前的实施

[EventSource(Name = "EventSourceLogger")]
public class EventSourceLogger : EventSource
{
    private static EventSourceLogger instance;

    private EventSourceLogger()
    {
    }

    public static EventSourceLogger Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new EventSourceLogger();
             }

            return instance;
        }
    }
}

0 个答案:

没有答案