我想只使用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;