这个问题是在一次采访中被问到的。第一部分是编写单例类:
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
public:
static Singleton* getSingletonInstance()
{
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
};
然后我被问到如何getSingletonInstance()
在多线程情况下处理这个问题。我不太确定,但我修改为:
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
static mutex m_;
public:
static Singleton* getSingletonInstance()
{
m_pend();
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
static void releaseSingleton()
{
m_post();
}
};
然后有人告诉我,虽然需要互斥锁,但挂起和发布互斥锁效率不高,因为这需要时间。并且有更好的方法来处理这种情况。
有人知道在多线程情况下处理单例类的更好更有效的方法吗?