Question

Selon les ressources suivantes, en C ++ (spécialement Visual C ++) SCOPED initialisation variable statique est pas sûre. Mais, les variables statiques globales sont en sécurité.

variables statiques Thread-safe sans mutexing

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

Alors, est-code suivant avec thread-safe variable de membre statique?

class TestClass
{
public:
   static MyClass m_instance;
}

Myclass TestClass::m_instance;

Merci d'avance!

Était-ce utile?

La solution

Il est plus une question de variables statiques scope fonction-contre tous les autres types de variable statique, plutôt que par rapport à scope GLOBALS.

Tous les non-fonction de portée variables statiques sont construites, alors qu'il n'y a qu'un seul fil actif avant main (). variables statiques fonction de portée sont réalisées la première fois leur fonction contenant est appelée. La norme est muet sur la question de savoir comment au niveau de statics fonction sont construites lorsque la fonction est appelée sur plusieurs threads. Cependant, chaque mise en œuvre que j'ai travaillé avec utilise un verrou autour du constructeur (avec un drapeau deux fois vérifié) pour garantir la sécurité-fil.

Autres conseils

Oui (*). Lorsque globaux sont initialisés statics, il n'y a qu'un seul fil autour et tous les constructeurs sont appelés à ce sujet. Ce n'est pas vrai pour les fonctions de statique, cependant.

(*) On peut éventuellement faire statics pas thread global de sécurité en créant des fils dans certains des constructeurs et la planification des étapes d'initialisation sur ces fils. Dans ce cas, les règles habituelles de sécurité thread apply.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top