Multithreading 如果我在多线程程序中访问一个单实例,会发生什么 编辑:好的,现在可以了。我不知道到底什么是最严重的问题,但我没有做一些锁定,这是需要避免比赛条件。此外,我还将“volatile”关键字添加到singleton实例变量的deklation中。

Multithreading 如果我在多线程程序中访问一个单实例,会发生什么 编辑:好的,现在可以了。我不知道到底什么是最严重的问题,但我没有做一些锁定,这是需要避免比赛条件。此外,我还将“volatile”关键字添加到singleton实例变量的deklation中。,multithreading,singleton,nullpointerexception,Multithreading,Singleton,Nullpointerexception,如果我有一些线程在运行,并且在一个线程中我访问了一个单例(可能是在另一个线程中创建的),我会得到一个新的“单例”,因为每个第一次访问它的线程都会调用单例的构造函数?我理解得对吗 问题是在我的应用程序中,我有一个由主线程创建的单例。如果我调用Singleton.Instance.somemethod(…),我总是会得到空指针异常或空列表,即使这些列表是在主线程中创建和填充的 有没有办法处理这个问题,这样我就可以在所有运行的线程中使用相同的单例实例?如何同步整个实例 多谢各位 编辑:抱歉,缺少一些非

如果我有一些线程在运行,并且在一个线程中我访问了一个单例(可能是在另一个线程中创建的),我会得到一个新的“单例”,因为每个第一次访问它的线程都会调用单例的构造函数?我理解得对吗

问题是在我的应用程序中,我有一个由主线程创建的单例。如果我调用Singleton.Instance.somemethod(…),我总是会得到空指针异常或空列表,即使这些列表是在主线程中创建和填充的

有没有办法处理这个问题,这样我就可以在所有运行的线程中使用相同的单例实例?如何同步整个实例

多谢各位

编辑:抱歉,缺少一些非常重要的信息。我正在Visual Studio 2010 Professional下使用C#和.NET Framework 4.0

我通过以下方式创建Singleton:

 static readonly object _padlock = new object();

    public static StaticAnalyzer Instance
    {
        get
        {
            lock (_padlock)
            {
                if (_instance == null)
                {
                    _instance = new StaticAnalyzer();
                }
                return _instance;
            }
        }
    }

在后台,每个线程是否都有自己的虚拟内存空间?因此,如果我在主线程中创建单例,然后在创建一些带有task.factory的工作线程时,工作线程调用实例,那么为什么它们会得到真正的单例呢?因为静态关键字

否,一个单例(如果正确地实现了)将只适用于所有线程。类似于
System.DBNull
。否则它就不是单身汉了。您的代码中一定有错误。

似乎缺少单例编码。您应该向我们展示您的Singleton类的精简版本。您的代码似乎有效,从您的描述来看,StaticAnalyzer上的方法不是线程安全的,请提供方法,它们的用法和问题会更清楚