Domanda

Secondo seguenti risorse, in C ++ (specialmente Visual C ++) scope inizializzazione delle variabili statico non è thread sicuro. Ma, le variabili statiche globali sono sicuri.

thread-safe variabili statiche senza mutexing?

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

Quindi, sta seguendo con il codice membro statico variabile thread-safe?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

Grazie in anticipo!

È stato utile?

Soluzione

E 'più una questione di variabili statiche di funzione con ambito vs. ogni altro tipo di variabile statica, piuttosto che contro ambito globali.

Tutte le variabili statiche non a scopo funzionale vengono costruiti prima principale (), mentre c'è un solo thread attivo. variabili statiche a scopo funzionale sono costruiti la prima volta la loro funzione di contenimento è chiamato. Lo standard tace sulla questione di come statica a livello di funzione sono costruite quando la funzione è chiamato più thread. Tuttavia, ogni implementazione Ho lavorato con usa un lock attorno al costruttore (con una bandiera due volte controllato) per garantire la thread-safety.

Altri suggerimenti

Si (*). Quando statica globali sono inizializzate, c'è solo un filo intorno e tutti i costruttori sono chiamati su di esso. Questo non è vero per la statica della funzione, però.

(*) Si può eventualmente fare statica globali non thread-safe creando fili in alcuni dei costruttori e la pianificazione delle fasi di inizializzazione su questi fili. In questa discussione usuale caso valgono le norme di sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top