Frage

Nach folgenden Ressourcen, in C ++ (speziell Visual C ++) scoped statische Variable Initialisierung nicht sicher ist, fädelt. Aber sind globale statische Variablen sicher.

Thema sichere statische Variablen ohne mutexing?

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

So ist folgender Code mit statischer Membervariable Thread-sicher?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Es ist mehr eine Frage der Funktion-scoped statischer Variablen gegen jede andere Art von statischen Variablen, anstatt scoped gegen Globals.

Alle nicht-Funktion-scope statischen Variablen werden vor der Haupt konstruiert (), während es nur einen aktiven Threads ist. Function-scope statische Variablen zum ersten Mal ihrer enthaltende Funktion aufgerufen werden konstruiert. Der Standard ist stumm auf die Frage, wie Funktionsebene Statik aufgebaut werden, wenn die Funktion auf mehreren Threads aufgerufen wird. jede Implementierung Ich habe mit Anwendungen eine Sperre um den Konstruktor gearbeitet (mit einem zweimal geprüft Flag) zu garantieren Thread-Sicherheit jedoch.

Andere Tipps

Ja (*). Wenn globale Statik initialisiert werden, gibt es nur einen Faden um und alle Konstrukteure werden sie aufgefordert hatte. Dies ist für die Funktion der Statik nicht wahr, wenn.

(*) Man kann möglicherweise globale Statik nicht Thread-sicher machen durch Fäden in einigen der Konstrukteure zu schaffen und auf diese Threads einige Initialisierung Stufen planen. In diesem Fall üblichen Fadensicherheitsregeln gelten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top