【发布时间】:2012-08-28 05:50:18
【问题描述】:
这个问题是在一次采访中被问到的。第一部分是编写单例类:
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();
}
};
然后有人告诉我,虽然需要互斥锁,但挂起和发布互斥锁效率不高,因为它需要时间。并且有更好的方法来处理这种情况。
有人知道在多线程情况下处理单例类的更好更有效的方法吗?
【问题讨论】:
-
根本不使用单例?
-
在多线程代码中使用全局状态是解决无限麻烦的好方法。在愚蠢的情况下加倍如此。
-
@CatPlusPlus :这很简单。傻瓜。
标签: c++ multithreading synchronization singleton mutex