Pergunta

De acordo com os seguintes recursos, em C++(Especialmente o Visual C++) escopo estático de inicialização de variável não é thread-safe.Mas, variáveis globais estáticas são seguros.

Thread-safe variáveis estáticas sem mutexing?

http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx

Assim, é de código a seguir com a variável de membro estático thread-safe?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

Obrigado antecipadamente!

Foi útil?

Solução

É mais uma questão de função de escopo de variáveis estáticas versusqualquer outro tipo de variável estática, ao invés de incluir no escopo vs.globals.

Tudo de função não-escopo de variáveis estáticas são construídos antes de main(), enquanto que há apenas uma thread ativa.Funções estáticas são construídos a primeira vez que os contêm função é chamada.A norma é omissa sobre a questão de como a função de nível de estática são construídos quando a função é chamada em vários segmentos.No entanto, cada implementação trabalhei com usa um bloqueio em torno do construtor (com uma, duas vezes-verificada bandeira) para garantir segurança de segmentos.

Outras dicas

Sim(*).Quando globais estáticas são inicializados, existe apenas um segmento ao redor e todos os construtores são chamados sobre ele.Isso não é verdade para a função estática, embora.

(*) Pode-se, possivelmente, tornar global estática, não é thread-safe através da criação de threads em alguns dos construtores e agendamento de alguns inicialização fases em que esses segmentos.Neste caso usual thread regras de segurança aplicáveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top