Операции записи инициализируют сам объект, позволяя другим потокам обращаться к полуинициализированному объекту. (Да, это действительно происходит на современных процессорах; это не просто теоретический подход.)

б 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 от вызова несколькими потоками.

Мой вопрос: мне действительно нужно охранять экземпляр синглтона? или ОС делает это для меня? Второй вопрос заключается в том, является ли первый метод правильным способом получения экземпляра синглтона?

Заранее спасибо...

Ответы на вопрос(6)

Ваш ответ на вопрос