這個問題被問了採訪。第一部分是寫單例類:辛格爾頓與多線程
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();
}
};
然後有人告訴我,儘管需要一個互斥體,等待和張貼互斥是因爲它需要時間效率不高。有一個更好的方法來處理這種情況。
有誰知道一個更好的有效的方式來處理多線程情況單身類?
請不要使用singleton? –
在多線程代碼中使用全局狀態是獲得無限頭痛的好方法。在愚蠢的情況下雙打。 –
@CatPlusPlus:這很簡單。傻瓜。 –