Операции записи инициализируют сам объект, позволяя другим потокам обращаться к полуинициализированному объекту. (Да, это действительно происходит на современных процессорах; это не просто теоретический подход.)
б 1
DataCenter* DataCenter::getInstance()
{
static DataCenter instance;
return &instance;
}
Способ 2
DataCenter* DataCenter::getInstance()
{
if (!m_instanceFlag)
{
m_instance = new DataCenter();
m_instanceFlag = true;
}
return m_instance;
}
Я работаю над многопоточным программированием, и DataCenter будет доступен более чем одному потоку. У меня был метод 2, чтобы получить экземпляр DataCenter, и он работал нормально. Но я заметил, что мне нужно защитить экземпляр Singleton от вызова несколькими потоками.
Мой вопрос: мне действительно нужно охранять экземпляр синглтона? или ОС делает это для меня? Второй вопрос заключается в том, является ли первый метод правильным способом получения экземпляра синглтона?
Заранее спасибо...