To pytanie zadano w wywiadzie. Pierwsza część była napisać singleton Klasa:Singleton z wielowątkowymi
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
public:
static Singleton* getSingletonInstance()
{
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
};
Następnie poproszono mnie, jak obsługiwać ten getSingletonInstance() w wielowątkowym sytuacji. Nie byłem pewien, ale zmodyfikowany jako:
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();
}
};
następnie powiedziano mi, że chociaż wymagana jest mutex czasu i zamieszczając mutex nie jest skuteczny, gdyż wymaga czasu. I jest lepszy sposób radzenia sobie z tą sytuacją.
Czy ktoś zna lepszy sposób radzenia sobie z klasą singleton w sytuacji wielowątkowej?
Nie używać w ogóle singleton? –
Używanie stanu globalnego w kodzie wielowątkowym to dobry sposób na uzyskanie nieskończonych bólów głowy. Zupełnie tak w przypadku głupota. –
@CatPlusPlus: To jest prostota. Prostak. –