aneira segura de obter uma instância singleton de multithreads

Método

DataCenter* DataCenter::getInstance()
{
    static DataCenter instance;
    return &instance;    
}

Method 2

DataCenter* DataCenter::getInstance()
{
    if (!m_instanceFlag)
    {
        m_instance = new DataCenter();
        m_instanceFlag = true;
    }    
    return m_instance;      
}

Estou trabalhando em uma programação multithread e o DataCenter será acessado por mais de um thread. Eu costumava ter o método 2 para obter a instância do DataCenter e funcionava bem. Mas observei que preciso impedir que a instância singleton seja chamada por vários threads.

Minha pergunta é primeiro, eu realmente preciso proteger a instância singleton? ou OS faz isso por mim? A segunda questão é: o primeiro método é o caminho certo para obter a instância singleton?

Desde já, obrigado..

questionAnswers(6)

yourAnswerToTheQuestion