Diese Frage wurde in einem Interview gestellt. Der erste Teil war die Singleton-Klasse zu schreiben:Singleton mit Multithreads
class Singleton
{
static Singleton *singletonInstance;
Singleton() {}
public:
static Singleton* getSingletonInstance()
{
if(singletonInstance == null)
{
singletonInstance = new Singleton();
}
return singletonInstance;
}
};
Dann wurde ich gefragt, wie diese getSingletonInstance() in einer Multi-Thread-Situation zu handhaben. Ich war nicht wirklich sicher, aber ich modifizierte:
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();
}
};
dann wurde mir gesagt, dass, obwohl ein Mutex erforderlich ist, anhängig und ein Mutex Posting nicht effizient ist, wie es dauert seine Zeit. Und es gibt einen besseren Weg, um mit dieser Situation umzugehen.
Kennt jemand eine bessere effiziente Möglichkeit, die Singleton-Klasse in einer Multithread-Situation zu behandeln?
Kein Singleton verwenden? –
Die Verwendung des globalen Status in einem Multithread-Code ist eine gute Möglichkeit, um unendliche Kopfschmerzen zu bekommen. Zweifellos im Falle von stupidgleton. –
@CatPlusPlus: Es ist Einfaltspinsel. Einfaltspinsel. –