MFC线程安全单例

时间:2016-04-04 02:41:17

标签: multithreading mfc singleton

我想只使用MFC 创建一个线程安全的单例。我更喜欢避免使用boost :: thread,而且我不能在VS2010上使用std :: thread。 此外,VS 2010具有C ++ 11限制(如果没有,它会更容易,因为我认为它支持线程安全的静态变量初始化)。

到目前为止,我已经尝试过这个解决方案,但我不确定它是多么的线程安全。 根据我的理解,一个问题是在创建单例实例后初始化静态CCriticalSection,如果两个线程获得一个实例并生成两个单例对象,则会出现一些麻烦。

在我的情况下,只有两个线程同时运行,一个主线程和一个工作线程。主线程将获得第一个实例,工作线程将不时获取实例。

在这种情况下,这个类是否足够线程安全?我错过了什么吗? 如果没有办法用MFC做一个线程安全足够的单例类,我只会考虑提升。任何建议或建议都非常感谢。

// Singleton.h

class CSingleton
{    
    static CCriticalSection m_cs;
    public:
    static CSingleton& GetInstance()
    {   
        m_cs.Lock();        
        static CSingleton instance;
        m_cs.Unlock();      
        return instance;
    }   
    virtual ~CSingleton(){};

    private:
    CSingleton(){};                     // Constructor  
    CSingleton( CSingleton const& );    // Don't Implement
    void operator=( CSingleton const& ); 
}   

// Singleton.cpp

// Initialize Critical Section
CCriticalSection CSingleton::m_cs;

0 个答案:

没有答案