Thread construção preguiçosa segura de um singleton em C ++

Existe uma maneira de implementar um objeto singleton em C ++ que é:

Construído lentamente de maneira segura para threads (dois threads podem ser simultaneamente o primeiro usuário do singleton - ele ainda deve ser construído apenas uma vez Não depende de variáveis estáticas sendo construídas previamente (portanto, o próprio objeto singleton é seguro para uso durante a construção de variáveis estáticas

(Eu não conheço meu C ++ o suficiente, mas é possível que variáveis estáticas integrais e constantes sejam inicializadas antes da execução de qualquer código (ou seja, mesmo antes da execução de construtores estáticos - seus valores já podem ser "inicializados" no imagem do programa)? Em caso afirmativo - talvez isso possa ser explorado para implementar um mutex singleton - que por sua vez pode ser usado para proteger a criação do singleton real ..)

Excelente, parece que agora tenho algumas boas respostas (pena que não consiga marcar 2 ou 3 como sendoa respost). Parece haver duas soluções amplas:

Use a inicialização estática (em oposição à inicialização dinâmica) de uma variável estática do POD e implementando meu próprio mutex usando as instruções atômicas internas. Esse era o tipo de solução que eu estava sugerindo na minha pergunta e acredito que já sabiUse alguma outra função de biblioteca como pthread_once ouboost :: call_once. Estes eu certamente não conhecia - e sou muito grato pelas respostas postadas.

questionAnswers(9)

yourAnswerToTheQuestion