Singleton类&多线程

时间:2016-05-30 08:08:24

标签: c# multithreading singleton

问:当来自两个不同app-domains的两个线程访问该类时,单个实例是否会被破坏?

我做了一些研究,发现以下几点相关。

  1. A(.NET)Singleton对于每个App域都是唯一的 - 至少,常见的Singleton模式是。我想你可以实现每个进程Singleton,但我还没有想过它会如何工作....

  2. 你的单身人士将有2个实例。

  3. 该方法的输入参数(参数)位于堆栈中。每个线程都有一个单独的堆栈。当正在运行的线程切换时,堆栈将被替换。

  4. 专家建议。?

1 个答案:

答案 0 :(得分:3)

  

当来自两个不同app-domains的两个线程访问该类时,单个实例是否会被破坏?

是。甚至可以从相同的应用程序域。考虑一下这个简单的单例实现:

private static Singleton instance;
public static Singleton Instance
{
    if (instance == null)
    {
        instance = new Singleton();
    }

    return instance;
}

两个线程可能同时进入该属性。在这两种情况下instance == null都为真,并创建了一个新实例。一个方法已经返回创建的实例,另一个方法重置instance并稍后返回该实例。单身破碎。

阅读更多thread-safe singletons on the blog of Jon Skeet