Этот вопрос задавали в интервью. Первая часть заключалась в написании одноэлементного класса:
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();
}
};
то мне сказали, что, хотя требуется мьютекс, ожидающий и отправляющий мьютекс неэффективен, так как требуется время. И есть лучший способ справиться с этой ситуацией.
Кто-нибудь знает более эффективный способ обработки одиночного класса в многопоточной ситуации?